微服务软件架构是一个包含各种组织的系统组织 , 这些组件包括 Web服务器, 应用服务器, 数据库,存储, 通讯层), 它们彼此或和环境存在关系 。系统架构的目标是解决利益相关者的关注点 。
![阿里微服务布道师:详解微服务架构设计](http://img.jiangsulong.com/220421/21315914O-0.jpg)
文章插图
Conway’s law: Organizations which design systems[...] are constrained to produce designs which are copies of the communication structures of these organizations.
(设计系统的组织 , 其产生的设计和架构等价于组织间的沟通结构 。)
Monolithic架构
![阿里微服务布道师:详解微服务架构设计](http://img.jiangsulong.com/220421/21315913Z-1.jpg)
文章插图
Monolithic比较适合小项目 , 优点是:
开发简单直接 , 集中式管理, 基本不会重复开发
功能都在本地 , 没有分布式的管理开销和调用开销 。它的缺点也非常明显 , 特别对于互联网公司来说(不一一列举了):
开发效率低:所有的开发在一个项目改代码 , 递交代码相互等待 , 代码冲突不断
代码维护难:代码功能耦合在一起 , 新人不知道何从下手
部署不灵活:构建时间长 , 任何小修改必须重新构建整个项目 , 这个过程往往很长
稳定性不高:一个微不足道的小问题 , 可以导致整个应用挂掉
扩展性不够:无法满足高并发情况下的业务需求
微服务架构微服务是指开发一个单个小型的但有业务功能的服务 , 每个服务都有自己的处理和轻量通讯机制 , 可以部署在单个或多个服务器上 。微服务也指一种种松耦合的、有一定的有界上下文的面向服务架构 。也就是说 , 如果每个服务都要同时修改 , 那么它们就不是微服务 , 因为它们紧耦合在一起;如果你需要掌握一个服务太多的上下文场景使用条件 , 那么它就是一个有上下文边界的服务 , 这个定义来自DDD领域驱动设计 。
相对于单体架构和SOA , 它的主要特点是组件化、松耦合、自治、去中心化 , 体现在以下几个方面:
- 一组小的服务
服务粒度要小 , 而每个服务是针对一个单一职责的业务能力的封装 , 专注做好一件事情 。 - 独立部署运行和扩展
每个服务能够独立被部署并运行在一个进程内 。这种运行和部署方式能够赋予系统灵活的代码组织方式和发布节奏 , 使得快速交付和应对变化成为可能 。 - 独立开发和演化
技术选型灵活 , 不受遗留系统技术约束 。合适的业务问题选择合适的技术可以独立演化 。服务与服务之间采取与语言无关的API进行集成 。相对单体架构 , 微服务架构是更面向业务创新的一种架构模式 。 - 独立团队和自治
团队对服务的整个生命周期负责 , 工作在独立的上下文中 , 自己决策自己治理 , 而不需要统一的指挥中心 。团队和团队之间通过松散的社区部落进行衔接 。
我们为什么采用微服务呢?
"让我们的系统尽可能快地响应变化" - Rebecca Parson让我们的系统尽可能快地去响应变化 。其实几十年来我们一直在尝试解决这个问题 。如果一定要在前面加个限制的话 , 那就是低成本的快速响应变化 。上世纪90年代Kent Beck提出要拥抱变化 , 在同期出现了诸多轻量级开发方法(诸如 XP、Scrum);2001年敏捷宣言诞生 , 之后又出现了精益、看板等新的管理方式 。如果说 , 这些是为了尽快的响应变化 , 在软件开发流程和实践方面提出的解决方案 , 那么微服务架构就是在软件技术和架构层面提出的应对之道 。
![阿里微服务布道师:详解微服务架构设计](http://img.jiangsulong.com/220421/2131592016-2.jpg)
文章插图
Autonomous
A Microservice is a unit of functionality; it provides an API for a set of capabilities oriented around a business domain or common utility
Isolated
A Microservice is a unit of deployment; it can be modified, tested and deployed as a unit without impacting other areas of a solution
Elastic
推荐阅读
- 线下商家怎么运用微信小程序留存和裂变客户?四个方法轻松解决
- 腾讯健康系统实名认证怎么修改?
- Apache服务器下设置404错误页面
- 记一次使用 frp 完成实现服务器内网穿透全过程
- 别再问用 Go 语言如何对接微信支付了:看看这个包
- Python自建免费HTTP服务器,无公网IP也能远程访问
- IP、子网掩码、缺省网关/默认网关、DNS、服务器、端口的总结
- 微信|微信安卓端发布8.0.22内测版:新增分类清理功能
- 杀毒软件|微软Defender又翻车!Chrome更新被当做可疑活动
- 微信推出开发者版:基于Android版v7.0.18