服务部署模式
服务部署模式是云计算和IT运维领域的关键概念,主要涉及如何将软件更新或新版本部署到生产环境中,同时最小化对用户的影响和服务的停机时间。
下面是一些常见的部署模式:
- 蓝绿部署(Blue-Green Deployment):蓝环境为当前生产环境,绿环境为新版本或更新,通常在部署前保持与生产环境相同的状态。在绿环境中部署新版本或更新,完成后再将流量切换到绿环境,蓝环境则作为备份或用于下一轮更新的准备
- 滚动更新(Rolling Update):按批次逐步更新服务实例
- 金丝雀发布(Canary Release):又称灰度发布(Gray Release 或 Dark Launch),先只部署新版本到一小部分用户,如5%。根据金丝雀测试的结果,逐步增加新版本的比例
- A/B测试(A/B Testing):两个或多个版本并行运行,根据性能或用户反馈来决定哪个版本更优
- 影子部署(Shadow Deployment):新版本的应用程序在生产环境与旧版本并行运行,但不处理实际流量
WKWebView 请求拦截
WKWebView 资源实现离线化,最关键的一步就是要拦截网络请求。使用 WKURLSchemeHandler 方案来拦截 WKWebView 的请求是一种比较灵活和强大的方式。
WKURLSchemeHandler 在 iOS 11.3 之前(不包含)会丢失 Body,在 iOS 11.3 以后 WebKit 做了优化只会丢失 Blob 类型数据。
使用 WKURLSchemeHandler 拦截 http/https 请求的数据,需要 hook WKWebView 的 handlesURLScheme 方法,然后返回 NO。
定义类实现 WKURLSchemeHandler 协议,实现方法 -webView:startURLSchemeTask: 和 -webView:stopURLSchemeTask:
在 WKWebView 的配置对象 WKWebViewConfiguration 中,使用 setURLSchemeHandler: 方法注册你自定义的类
低代码
低代码(Low-Code)是一种软件开发方法,它允许非专业开发者通过图形用户界面和配置而不是传统的手写代码来创建应用程序。低代码平台提供了可视化的开发环境,用户可以使用拖放组件和模型驱动的逻辑来构建应用程序的前端、后端以及数据库配置。
低代码出现是为了满足快速开发、减少对专业开发人员依赖、业务与IT融合、以及支持数字化转型的需求。
低代码平台的优点包括:快速开发,降低成本,易于维护,业务分析师和领域专家可直接参与到开发中,有一定可扩展性。
低代码开发的局限性:定制化限制,性能问题,依赖平台,可能引入新的安全漏洞。
优先级反转
在 iOS 操作系统中,优先级反转是指系统资源(如 CPU 时间)被低优先级任务占用的现象,导致高优先级任务无法及时执行。
优先级反转可能导致卡死。例如,持有锁且优先级低的线程迟迟得不到调度,而具有高优先级的线程由于拿不到锁,一直被阻塞,所以互相死锁。
以下是常用的避免优先级反转的策略:
- 优先级继承(Priority Inheritance):其基本思想是,当一个低优先级任务持有一个被高优先级任务需要的资源时,这个低优先级任务会临时继承高优先级任务的优先级,直到它释放了资源。这样,低优先级任务就不会无期限地阻塞高优先级任务,从而减少了优先级反转的时间。
- 优先级天花板(Priority Ceiling Policy):当一个低优先级任务持有高优先级任务需要的资源时,低优先级任务会被提升到系统中当前最高优先级的水平,直到它释放资源。它与优先级继承策略非常相似,都旨在防止高优先级任务因为等待低优先级任务释放资源而被无限期阻塞。
- 锁层级策略(Lock Hierarchy Policy):将锁组织称一个层次结构,其中锁按照优先级或重要性进行排序。当一个线程持有多个锁时,它必须按照锁的层级顺序请求这些锁,并且按照相反的顺序释放这些锁。