0%

  • 容错系统就是为故障而构建的。如果发生故障,容错系统将不会中断,并且可以继续处理请求。
  • EC2 虚拟服务器,默认情况下不是容错的。
  • 单点故障(SPOF),如果一个硬件发生故障,整个服务中断。
  • AWS 解决方案:自动扩展组(auto-scaling group)、ELB 和 SQS。
  • 没有(单点故障)—— 在出现故障时,不能处理请求。
  • 高可用性 —— 在出现故障时,需要一些时间直到像之前一样处理请求。
  • 容错 —— 在出现故障时,请求会像之前一样得到处理,并且没有任何可用性问题。
阅读全文 »

如何基于 EC2 实例搭建一个高可用性架构?

哈佛研究团队对高可用性的定义:在一年内需要满足 99.99% 的正常运行。

高可用性 & 容错

  • 一个高可用性系统可以在较短的停机时间内自动从故障中恢复。

  • 容错系统要求系统提供的服务不会因为一个组件失效而无法提供服务。

AWS 提供了构建基于 EC2 实例的高可用系统的工具:

  • 利用 CloudWatch 监控虚拟服务器的运行状况。如果需要,自动触发故障恢复;
  • 使用多个隔离的数据中心;
  • 使用自动扩展(auto-scaling)确保拥有一定数量的虚拟服务器用以自动替换失效的实例;
阅读全文 »

objc_setAssociatedObject() - 设置关联对象

用于给对象添加关联对象,传入 nil 则可以移除已有的关联对象;

让一个对象和另一个对象关联起来,即一个对象保持对另一个对象的引用,并可以获取这个对象。关键字是一个 void 类型的指针。每个关键字必须是唯一的,通常都是会采用静态变量来作为关键字。

/** 
 * Sets an associated value for a given object using a given key and association policy.
 * 
 * @param object 关联的源对象.
 * @param key 关联的key.
 * @param value 通过key值关联对象,通过将此个值置成nil来清除关联.
 * @param policy 关联策略
 * 
 * @see objc_setAssociatedObject
 * @see objc_removeAssociatedObjects
 */
OBJC_EXPORT void
objc_setAssociatedObject(id _Nonnull object, const void * _Nonnull key,
                         id _Nullable value, objc_AssociationPolicy policy)
    OBJC_AVAILABLE(10.6, 3.1, 9.0, 1.0, 2.0);
阅读全文 »

  • 下载链接
  • Web 查询:https://whois.icann.org/zh 👍👍👍

Deep Whois 是一款网络管理专业软件,你可以用它通过 IP 地址和 Hostname 查询 Whois 相关信息。你可以在 app 中查阅所有的 whois 数据,比如域名、TLD、网址、IDN、IP 地址(IPv4 和 IPv6)。

Deep Whois 是最完整,最先进的 WHOIS 应用程序。
该工具允许您在所有 WHOIS 数据库中查找所有主机名,域名,TLD(顶级域名),IDN(Internationalized Domain Names,国际化域名),IP 地址(IPv4 和 IPv6),IP 网络和自治系统(ASN,ISP ID)的信息。
Deep Whois 开箱即用,可以查找所有权,国家和更多有关所有内容的信息,无需混淆复杂的选项和服务器选择。

阅读全文 »

6. 网站的伸缩性架构

网站伸缩性:不需要改变网站的软硬件设计,仅仅通过改变部署的服务器数量就可以扩大或者缩小网站的服务处理能力。

6.1 网站架构的伸缩性设计

网站的伸缩性设计:

  1. 根据功能进行物理分离实现伸缩(不同的服务器部署不同的服务);
  2. 单一功能通过集群实现伸缩(集群内的多台服务器部署相同的服务);

不同功能进行物理分离实现伸缩

纵向分离(分层后分离):将业务处理流程上的不同部分分离部署。
横向分离(业务分割后分离):将不同的业务模块分离部署。

阅读全文 »

7. 网站的可扩展架构

网站的扩展性架构设计:在对现有系统影响最小的情况下,系统功能可持续扩展及提升的能力。

扩展性 & 伸缩性

扩展性(Extensibility)
指对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力。表现在系统基础设施稳定不需要经常变更,应用之间较少依赖和耦合,对需求变更可以敏捷响应。它是系统架构设计层面的开闭原则(对扩展开放,对修改关闭),架构设计考虑未来功能扩展,当系统增加新功能时,不需要对现有系统的结构和代码进行修改。

伸缩性(Scalability)
指系统能够通过增加(减少)自身资源规模的方式增强(减少)自己计算处理事务的能力。如果这种增减是成比例的,就被称作线性伸缩性。在网站架构中,通常指利用集群的方式增加服务器数量、提高系统的整体事务吞吐能力。

阅读全文 »

4. 网站的高性能架构

网站性能优化的主要工作:改善高并发用户访问情况下的网站响应速度。

4.1 不同视角下的网站性能

用户角度

从用户的角度来说,网站的性能就是用户在浏览器上直观感受到的网站响应速度。

在实践中,使用一些前端架构优化手段,通过优化页面 HTML 式样、利用浏览器端的并发和异步特性、调整浏览器缓存策略、使用 CDN 服务、反向代理等手段,使浏览器尽快地显示用户感兴趣的内容、尽可能近地获取页面内容,即使不优化应用程序和架构,也可以很大程度地改善用户视角下的网站性能。

开发人员

应用程序本身及其相关子系统的性能:响应延迟、系统吞吐量、并发处理能力、系统稳定性。

优化手段:

  1. 使用缓存加速数独读取;
  2. 使用集群提高吞吐能力;
  3. 使用异步消息加快请求响应及实现削峰;
  4. 使用代码优化手段改善程序性能;
阅读全文 »

5. 网站的高可用架构

网站的可用性(Availablilty)描述网站可有效访问的特性
网站的有用性(Usability),通常也被译作可用性,但是后者强调的是网站的有用性,即对最终用户的使用价值。

5.1 网站可用性度量

网站不可用时间(故障时间)= 故障修复时间点 - 故障发现(报告)时间点。
网站年度可用性指标 = (1 - 网站不可用时间 / 年度总时间)* 100%。

5.2 网站可用性考核

故障分是指对网站故障进行分类加权计算故障责任的方法。

故障分的计算公式:
故障分 = 故障时间(分钟)* 故障权重

网站故障分类 描述 权重
事故级故障 严重故障,网站整体不可用 100
A 类故障 网站访问不顺畅或核心功能不可用 20
B 类故障 非核心功能不可用,或核心功能少数用户不可用 5
C 类故障 以上故障以外的其他故障 1
阅读全文 »