[包子分享] 构架模式: Microservices Architecture

http://baozitraining.org


微服务构架是近年来比较流行的服务端应用构架,由其非常好的可伸缩性,稳定性以及灵活的协同开发模式而著称于世。越来越多的公司都或多或少地开始采用微服构架,比如Netflix,Amazon, 等等。其实为服务并非什么新框架,它本质上是非常老的SOA 构架的一种实现方式。在本文中,包子将为大家简单讲解一下为服务的一些基本概念及优势,然后再分享一篇文章来阐述它的一些pitfalls, 希望同学们看完能有所收获。

什么是微服务

设想你正在开发一个电子商务应用,需要有商品浏览,订单管理,库存管理以及发货等功能(想象下亚马逊)。如果只是简单地按照传统的分成层构架来经行,比如加入:

  • 表示层处理用户请求;
  • 业务逻辑层处理不同功能模块的业务;
  • 数据库层处理所有业务逻辑的数据请求。

这个应用的每一层都会变得十分复杂,而且我们必须另外想办法来解决其可伸缩性的问题。

我们在对整个网络应用经行开发维护的时候,不同的功能模块都可能会在不同时期经行升级。如何能够在不同模块上使用不同的技术手段,并且在不间断整体服务的基础上经行升级集成成了一个挑战。

对于这个应用的开发和维护,必然会有一个很大的团队来经行,那么如何尽量使所有成员最小化其所须要关心的领域,并且能很方便地对团队经行管理也是一个很大的challange。

于是在微服务的构架下面,你这个电子商务应用经行纵向切分:每一个功能模块,比如订单管理,库存管理等包装成一个独立的服务,有着自己独立的接口和负载均衡模块,运行在自己专门的一个服务器(集群)上,以及使用专门的数据库等。当然,为了减少物理服务器开销,往往这些服务是运行在虚拟机或者是 container 上面。这样,公司的团队也被划分成了多个小团队(conways law),分别接管一个独立的服务--从开发测试到部署维护。

微服务的优势

这种微服务的优势非常明显,

  • 首先,它天生的分布式构架自然地解决了程序扩展性和稳定性的问题。每个服务可以按需地在不同的服务器上运行多个实例经行负载平衡和容错,而且它把错误隔离的很好,每个模块的错误不会影响到其他模块上;
  • 其次,由于每个服务都非常小,于是逻辑十分好理解。新的开发人员可以很快上手,没有太多负担,并且也方便内部的重新构架(对外部是透明的);
  • 然后每一个服务都可以经行随时的不间断地升级,而不用有破坏整个应用的烦恼,只要接口保持一致;
  • 最后,由于每个服务都是独立的,所以完全可以按需要使用不同的技术构架,从而达到最大化效益。

微服务不是免费的午餐

I am currently involved in architecting a system based around Microservices, and whilst the individual services are very simple, a lot of complexity exists at a higher level level in terms of managing these services and orchestrating business processes throughout them. Microservices one of these ideas that are nice in practice, but all manner of complexity comes out when it meets reality. For this reason, I wanted to write this article to capture some of these and redress the balance. Significant Operations Overhead A Microservices architecture brings a lot of operations overhead. Where a monolithic application might have been deployed to a small application server cluster, you now have tens of separate services to build, test, deploy and run, potentially in polyglot languages and environments. All of these services potentially need clustering for failover and resilience, turning your single monolithic system into, say, 20 services consisting of 40-60 processes after we've added resilience. Throw in load balancers and messaging layers for plumbing between the services and the estate starts to become pretty large when compared to that single monolithic application that delivered the equivalent business functionality! Productionising all of this needs high quality monitoring and operations infrastructure. Keeping an application server running can be a full time job, but we now have to ensure that tens or even hundreds of processes stay up, don't run out of disk space, don't deadlock, stay performant. It's a daunting task. Physically shipping this plethora of Microservices through your pipeline and into production also needs a very high degree of robust and release and deployment automation. Currently, there is not much in terms of frameworks and open source tooling to support this from an operational perspective. It's likely therefore that a team rolling out Microservices will need to make significant investment in custom scripting or development to manage these processes before they write a line of code that delivers business value. Operations is the most obvious and commonly held objection towards the model, though it is too easily brushed aside by proponents of this architecture.

原文发布于微信公众号 - 包子铺里聊IT(baozitraining)

原文发表时间:2015-05-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏祝威廉

ChatBot framework 开发实践

通常而言,通用聊天机器人(比如小冰等)底层技术是采用类似Seq2Seq等“生成”技术的。但是这种机器人属于探索性质,无法 提供特定的服务。而Siri则是兼具闲...

1213
来自专栏SDNLAB

P4:开创数据平面可编程时代

现有的SDN解决方案将控制平面与转发平面分离,并为我们提供了控制平面的可编程能力。而事实上,目前通过软件编程实现的控制平面的功能,在传统的高级交换机和路由器上也...

4077
来自专栏领域驱动设计DDD实战进阶

DDD实战进阶第一波(十五):开发一般业务的大健康行业直销系统(总结篇)

1853
来自专栏java一日一条

为什么开源可以提高程序员的编程技能?

我已经写了很多年的软件。最近我意识到,我越涉及(致力于,结合于等)开源技术,我写出来的代码就更好。这不由地让我疑惑起来:难道里面有什么相关性或因果关系吗?

1023
来自专栏携程技术中心

干货 | 携程实时大数据平台实践分享

编者:本文作者为携程大数据平台负责人张翼。张翼浙江大学硕士毕业,2015年初加入携程,主导了携程实时数据计算平台的建设,以及携程大数据平台整合和平台技术的演进。...

3806
来自专栏CSDN技术头条

仅用8个虚拟机,PayPal是如何扩展至日处理数十亿事务的

仅在8台虚拟机上,就实现了原本需要100台虚拟机才能实现的工作。甚至当CPU占用高达90%时仍能快速响应,这种Paypal前所未见的事务处理密度,却仅需之前十分...

2406
来自专栏全华班

二代蜘蛛侠

爬虫程序, 二代蜘蛛侠,此版本完全重新开发,比上一代更加强大(性能,易用,架构,分布式,简洁,成熟)

1773
来自专栏华章科技

Python为啥这么牛?跟其他语言相比究竟有什么优势?

导读:选择要学习的技术和选择要上的大学一样重要,如果选错了,你将来不仅得不到自己喜欢的高薪工作,反而会弄得一堆麻烦。如果你打开了这篇文章,说明你已经考虑选择Py...

1012
来自专栏编程

浅谈CPU 并行编程和 GPU 并行编程的区别

CPU 的并行编程技术,也是高性能计算中的热点,那么它和 GPU 并行编程有何区别呢? 本文将做出详细的对比,分析各自的特点,为深入学习 CPU 并行编程技术打...

1948
来自专栏数据猿

对象存储来势汹汹,究竟谁是“幕后推手”?

存储圈真会玩,继网络接入存储、块存储、文件存储之后,对象存储也掀起了新一轮发展浪潮。银行、保险、交通集团等传统企业纷纷换上了对象存储,真怀疑IT部门的单身狗只是...

4195

扫码关注云+社区

领取腾讯云代金券