阿里微服务布道师:详解微服务架构设计( 二 )


A Microservice is stateless; it can be horizontally scaled up and down as needed
Resilient
A Microservice is designed for failure; it is fault tolerant and highly available
Responsive
A Microservice responds to requests in a reasonable amount of time
Intelligent
The intelligence in a system is found in the Microservice endpoints not ‘on the wire’
Message Oriented
Microservices rely on HTTP or a lightweight message bus to establish a boundary between components; this ensures loose coupling, isolation, location transparency, and provides the means to delegate errors as messages
Programmable
Microservices provide API’s for access by developers and administrators
Composable
Applications are composed from multiple Microservices
Automated
The lifecycle of a Microservice is managed through automation that includes development, build, test, staging, production and distribution
服务之间如何通信

阿里微服务布道师:详解微服务架构设计

文章插图
 
 
一般同步调用比较简单 , 一致性强 , 但是容易出调用问题 , 性能体验上也会差些 , 特别是调用层次多的时候 。RESTful和RPC的比较也是一个很有意 思的话题 。一般REST基于HTTP , 更容易实现 , 更容易被接受 , 服务端实现技术也更灵活些 , 各个语言都能支持 , 同时能跨客户端 , 对客户端没有特殊的要 求 , 只要封装了HTTP的SDK就能调用 , 所以相对使用的广一些 。RPC也有自己的优点 , 传输协议更高效 , 安全更可控 , 特别在一个公司内部 , 如果有统一个 的开发规范和统一的服务框架时 , 他的开发效率优势更明显些 。
就看各自的技术积累实际条件 , 自己的选择了 。而异步消息的方式在分布式系统中有特别广泛的应用 , 他既能减低调用服务之间的耦合 , 又能成为调用之间的缓冲 , 确保消息积压不会冲垮被调用方 , 同时能 保证调用方的服务体验 , 继续干自己该干的活 , 不至于被后台性能拖慢 。
不过需要付出的代价是一致性的减弱 , 需要接受数据最终一致性;还有就是后台服务一般要 实现幂等性 , 因为消息发送出于性能的考虑一般会有重复(保证消息的被收到且仅收到一次对性能是很大的考验);最后就是必须引入一个独立的broker , 如 果公司内部没有技术积累 , 对broker分布式管理也是一个很大的挑战 。
 
阿里微服务布道师:详解微服务架构设计

文章插图
 
微服务优点
  • 每个微服务都很小 , 这样能聚焦一个指定的业务功能或业务需求 。
  • 微服务能够被小团队单独开发 , 这个小团队是2到5人的开发人员组成 。
  • 微服务是松耦合的 , 是有功能意义的服务 , 无论是在开发阶段或部署阶段都是独立的 。
  • 微服务能使用不同的语言开发 。
  • 微服务允许容易且灵活的方式集成自动部署 , 通过持续集成工具 , 如Jenkins, bamboo。
  • 一个团队的新成员能够更快投入生产 。
  • 微服务易于被一个开发人员理解 , 修改和维护 , 这样小团队能够更关注自己的工作成果 。无需通过合作才能体现价值 。
  • 微服务允许你利用融合最新技术 。
  • 微服务只是业务逻辑的代码 , 不会和html,css 或其他界面组件混合 。
  • 微服务能够即时被要求扩展 。
  • 微服务能部署中低端配置的服务器上 。
  • 易于和第三方集成 。
  • 每个微服务都有自己的存储能力 , 可以有自己的数据库 。也可以有统一数据库 。
微服务架构的缺点
  • 微服务架构可能带来过多的操作 。
  • 需要DevOps技巧 (http://en.wikipedia.org/wiki/DevOps).
  • 可能双倍的努力 。
  • 分布式系统可能复杂难以管理 。
  • 因为分布部署跟踪问题难 。
  • 当服务数量增加 , 管理复杂性增加 。
需要考虑的问题