exynos|腾讯T4架构师用这12张手绘图,轻松带你搞懂微服务架构!太厉害了( 二 )


根据马丁.福勒的描述 , 我总结了以下几点:

①小服务
小服务 , 没有特定的标准或者规范 , 但他在总体规范上一定是小的 。
②进程独立
每一组服务都是独立运行的 , 可能我这个服务运行在 Tomcat 容器 , 而另一个服务运行在 Jetty 上 。 可以通过进程方式 , 不断的横向扩展整个服务 。
③通信
过去的协议都是很重的 , 就像 ESB , 就像 SOAP , 轻通信 , 这意味着相比过去更智能更轻量的服务相互调用 , 就所谓 smart endpoints and dumb pipes 。
这些 Endpoint 都是解耦的 , 完成一个业务通信调用串起这些 Micro Service 就像是 Linux 系统中通过管道串起一系列命令业务 。
过去的业务 , 我们通常会考虑各种各样的依赖关系 , 考虑系统耦合带来的问题 。 微服务 , 可以让开发者更专注于业务的逻辑开发 。
④部署
不止业务要独立 , 部署也要独立 。 不过这也意味着 , 传统的开发流程会出现一定程度的改变 , 开发的适合也要有一定的运维职责 。
⑤管理
传统的企业级 SOA 服务往往很大 , 不易于管理 , 耦合性高 , 团队开发成本比较大 。
微服务 , 可以让团队各思其政的选择技术实现 , 不同的 Service 可以根据各自的需要选择不同的技术栈来实现其业务逻辑 。
微服务的利与弊为什么用微服务呢?因为好玩?不是的 。 下面是我从网络上找到说的比较全的优点:

  • 优点是每个服务足够内聚 , 足够小 , 代码容易理解这样能聚焦一个指定的业务功能或业务需求 。
  • 开发简单、开发效率提高 , 一个服务可能就是专一的只干一件事 。
  • 微服务能够被小团队单独开发 , 这个小团队是 2 到 5 人的开发人员组成 。
  • 微服务是松耦合的 , 是有功能意义的服务 , 无论是在开发阶段或部署阶段都是独立的 。
  • 微服务能使用不同的语言开发 。
  • 易于和第三方集成 , 微服务允许容易且灵活的方式集成自动部署 , 通过持续集成工具 , 如 Jenkins , Hudson , bamboo 。
  • 微服务易于被一个开发人员理解 , 修改和维护 , 这样小团队能够更关注自己的工作成果 。 无需通过合作才能体现价值 。 微服务允许你利用融合最新技术 。
  • 微服务只是业务逻辑的代码 , 不会和 HTML , CSS 或其他界面组件混合 。
  • 每个微服务都有自己的存储能力 , 可以有自己的数据库 , 也可以有统一数据库 。
总的来说 , 微服务的优势 , 就是在于 , 面对大的系统 , 可以有效的减少复杂程度 , 使服务架构的逻辑更清晰明了 。
但是这样也会带来很多问题 , 就譬如分布式环境下的数据一致性 , 测试的复杂性 , 运维的复杂性 。
什么组织适合使用微服务?微服务带了种种优点 , 种种弊端 , 那么什么组织适合使用微服务?①墨菲定律(设计系统)和康威定律(系统划分)康威定律 , 是一个五十多年前就被提出来的微服务概念 。 在康威的这篇文章中 , 最有名的一句话就是:
Organizations which design systems are constrained to produce designs which are copies of the communication structures of these organizations.
-Melvin Conway(1967)
中文直译大概的意思就是:设计系统的组织 , 其产生的设计等同于组织之内、组织之间的沟通结构 。
看看下面的图片 , 再想想 Apple 的产品、微软的产品设计 , 就能形象生动的理解这句话 。

感兴趣的各位可以研究一下!
②架构演化
架构是不断演化出来的 , 微服务也是这样 , 当从各大科技公司 , 规模大到一定程度 , 完全需要演化成更进一步管理的技术架构体系 。