Reference
Murphy’s Law: Anything that can go wrong will go wrong. 墨菲定律:凡事只要有可能出错,那就一定会出错。
Conway's law: Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization's communication structure. 康威定律:设计系统的架构受制于产生这些设计的组织的沟通结构。
演进中的架构
架构并不是被“发明”出来的,而是持续进化的结果。
技术架构者的第一职责就是做决策权衡。
单体架构(巨石系统 Monolithic Application)
- 并非 "不可拆分 All in One Piece", 更多的是 "自给自足 Self-Contained"
- 优点
- 易于分层
- 易于开发
- 易于部署测试
- 进程内调用简单高效
- 缺点
- 缺乏隔离与自治能力
- 代码bug影响面广,轻则影响程序运行,重则波及机器(端口占用、连接池泄露)
- 动态可维护性差
- 无法单独停止、更新、升级某一部分
- 缺乏隔离与自治能力
服务拆分架构
- 烟囱式架构 Information Silo Architecture
- 应用间完全独立(数据库、服务器)
- 微内核架构 Microkernel Architecture(插件式 Plug-in)
- 可拓展、灵活、天然隔离
- 插件模块间互不交互
- 事件驱动架构 Event-Driven Architecture
- 利用事件队列管道 Event Queues 解耦, 消费者相互独立但也可以利用管道互动
- 烟囱式架构 Information Silo Architecture
SOA架构 Service Oriented Architecture
- 一套软件研发方法论
- 有着明确的设计指导原则
- SOAP远程调用协议
- ESB企业服务总线消息管道 Enterprise Service Bus
- ...
- 给架构带来过度复杂性
- 一套软件研发方法论
微服务架构 Microservices
- 九个微服务系统的特征(非强制约束)
- 围绕业务能力构建(Organized around Business Capabilities)
- 围绕着一个拥有完整业务能力的团队去构建程序,而非按技术划分团队(UI团队、DBA团队、业务开发团队)。
- 分散治理(Decentralized Governance)
- 允许技术异构,用合适的技术栈完成业务
- 通过服务来实现独立自治的组件(Componentization via Services)
- 产品化思维(Products not Projects)
- 把软件研发当成一种持续改进、提升的过程,为产品的整个生命周期负责
- 数据去中心化(Decentralized Data Management)
- 轻量级通讯机制(Smart Endpoints and Dumb Pipes)
- 服务的功能不应使用复杂的通讯管道处理,由服务Endpoint自己解决
- 容错性设计(Design for Failure)
- 可靠系统完全可以由容许出错的服务来组成
- 演进式设计(Evolutionary Design)
- 承认服务会被报废淘汰
- 基础设施自动化(Infrastructure Automation)
- 围绕业务能力构建(Organized around Business Capabilities)
- 虚拟化与容器化技术发展贡献巨大
- Kubernetes 等基础设施提供的服务颗粒度相对较粗(针对容器做整体管理),无法满足细粒度的额外需求,如根据流量特诊、机器负载等的负载均衡
- 边车代理模式 Side-car Proxy
- 注入通讯代理服务器,为控制平面通讯带来细粒度的管理能力
- 九个微服务系统的特征(非强制约束)
无服务架构 Serverless
- 以 AWS 的 Lambda 服务为代表 (Faas,Function as a Service)
- 开发者只需关注业务
- 冷启动、无状态等特点,决定它不具有普适性