这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
架构的定义
全程软件架构。
- 是整体结构的抽象描述
- 用于指导系统各个方面的设计
由于一个软件的实现有很多种方法, 架构的重要性体现在对这些方法的选择起关键的指导作用。 所以说它是软件的「地基」。
架构的演进
单机
把所有功能实现在一个进程内,部署在一台机器上。
优点
- 简单。 现实应用中的应用需求不会非常简单, 而单机的服务模式除了简单以外没有任何优点。 所以单机的服务模式一般只会出现在初创阶段, 只要业务需要发展,这个架构就应该被迭代。
产生的问题
- C10K problem。 尽管高性能网络编程的技术发展相当迅速, C10K 问题已经逐渐得到解决, 然而互联网的发展也更加迅速, 我们正面临 C10M、C10B 等问题。 这说明了单机架构有性能瓶颈。
- 运维需要停服。 因为服务只由唯一的机器上面的唯一进程提供, 一旦有用户在使用服务,技术人员就没办法进行运维。
- 单机处理能力有限。 随着业务的不断增长, 单机的硬件资源很有可能不再满足要求
演进
如何提供更多的服务
单体、垂直应用/垂直切分
单体架构:分布式部署
垂直应用架构:按应用垂直切分的单体
优点
- 水平扩容
- 运维不需要停服
产生的问题
- 指责太多,开发效率低
- 爆炸半径大
演进
如何提高服务的效率
SOA、微服务/水平切分
SOA(Service-Oriented Architecture):
- 将应用的不同功能单元抽象为服务
- 定义服务之间的通信标准
微服务架构:SOA 的去中心化演进方向
产生的问题
- 数据一致性
- 高可用
- 治理
- 解耦与过微的平衡