wwqdrh

什么是微服务

SOA设计模式:面向服务的架构,需要解决的问题是通信协议如何选择、第三方中间件如何选择、服务粒度如何确定鞥

主要为微服务做定义,以及说明有什么优点与缺点,微服务架构应该是什么样的

微服务就是一些协同工作的小而自治的服务

单一职责原则: 把因相同原因而变化的东西聚合在一起,而把因不同原因而变化的东西分离开来

微服务将这一原则应用在独立的服务中,根据业务的边界来确定服务的边界

仅暴露外部需要的API,避免与消费方耦合

  • 弹性: 舱壁,需要做到修改一个服务并对其进行部署,而不影响其他任何服务
  • 技术异构性: 使用最合适的技术做相应的服务
  • 扩展: 细粒度的优势使得能够做到按需扩展需要的服务,以及简化部署,能够快速回滚
  • 与组织结构相匹配,各司其职
  • 可组合性: 易于重用已有的服务
  • 对可替代性的优化: 轻易的重写已有的服务或者进行删除

这章最后提醒了,微服务并不是一个通用的法则,要得到这些好处,同样的需要在部署、测试和监控方面做很多的工作,还需要考虑如何扩展系统,并保证它们的弹性,以及分布式事务等问题

演化式架构师

“事实上,我们要创造的东西从设计上来说就是要足够的灵活,有更好的适应性,并且能够根据用户的需求进行演化”

架构师必须改变那种从一开始就要设计出完美产品的想法,相反我们应该设计出一个合理的框架,在这个框架下可以慢慢演化出正确的系统,并且一旦我们学到了更多知识,应该可以很容易地应用到系统中。

像是城市规划师,而不是建筑师

作为架构师,不应该过多关注每个区域内发生的事情。这意味着我们应该考虑不同的服务之间如何交互,或者说保证我们能够对整个系统的健康状态进行监控。

制定原则,并且原则与实践相结合,用一些重要的原则来指导系统的演化,以及如何实现这些原则的细节。

  • 例如通信的方式,不能一个是http接口,一个是protobuffer,另一个又是Java RMI
  • 代码规范
  • 日志处理

能够清晰地描绘出跨服务系统的健康状态非常关键

可以选择push或者pull的方法进行收集数据,日志与监控类似,都是需要集中式管理

做好技术债务的平衡

一个演进式架构师应该承担的职责

  • 愿景: 确保在系统级有一个经过充分沟通的技术愿景,这个愿景可以帮助你满足客户和组织的需求
  • 同理心: 理解你所做的决定对客户和同事带来的影响
  • 合作: 和尽量多的同事进行沟通,从而更好地对愿景进行定义、修订及执行
  • 适应性: 确保在你的客户和组织需要的时候调整技术愿景
  • 自治性: 在标准化和团队自治之间寻找一个正确的平衡点
  • 治理: 确保系统按照技术愿景的要求实现