更新时间:2019年07月26日 10时54分06秒 来源:黑马程序员论坛
什么是微服务 微服务是用一组小服务构建的一个应用,服务运行在不同的进程中,服务之间通过轻量的通讯机制进行交互,并且服务可以通过自动化部署方式独立部署。正因为微服务架构中,服务之间是相互独立的,所以不同的服务可以使用不同的语言来开发,或者根据业务的需求使用不同类型的数据库。 微服务是相对于它出现之前的巨大单体应用来讲的,我们以电商系统为例进行说明,通过以下两张图直观的感受下单体应用与微服务的差异。 优点 1、服务解耦 将原有的巨大的单体应用拆分为多个独立的微服务,使得每个服务更专注于自己的业务,满足高内聚低耦合的设计原则。比如将电商服务差费为用户服务、账户服务、商品服务、购物车服务、订单服务等。 2、独立的开发环境 将应用拆分为独立的微服务,服务之间彼此隔离,通过轻量级的通讯机制(比如:dubbo)进行交互,使得开发时无需关注具体的开发环境,只需要协商好通讯机制即可。 3、独立的部署环境 微服务拥有独立的开发环境,因此需要根据各自的开发环境规划部署环境,对于访问量大的服务可以增加服务的部署数量,访问量小的服务适当的减少部署数量。 4、更高的扩展性 基于服务的独立性,服务之间的耦合性降低,无论从功能上,还是架构上,我们都可以进行更为灵活的扩展,而不影响其他服务。 缺点 1、通讯机制的不标准问题 微服务之间相互独立,但是服务间的交互需要依赖规范的通讯机制,没有规范的通讯机制作为桥梁,服务间交互将变得非常复杂。保证规范的通讯机制,是微服务的前提。 2、事务一致性问题 单体应用通过数据库事务保证一致性,拆分为微服务后,会形成分布式处理的业务,进而就会产生分布式事务一致性问题。分布式系统的事务一致性本身就是一个技术难题,目前没有一种很简单很完美的方案能够应对所有场景。分布式系统的一个难点就是因为“网络通信的不可靠”,只能通过“确认机制”、“重试机制”、“补偿机制”等各方面来解决一些问题。在综合考虑可用性、性能、实现复杂度等各方面的情况上,比较好的选择是“异步确保最终一致性”,只是具体实现方式上有一些差异。 3、服务间的依赖变得复杂 需要根据业务的重要性进行系统梳理,定义出关键业务和非关键业务;梳理服务调用的主要路径,明确强弱依赖、限流、降级规则等。服务治理就是基于以上规则进行的,否则无法进行系统运维或管理。比如非关键业务被关键业务所依赖,会导致非关键业务变成关键业务,服务链中就会出现“木桶效应”,即整个服务质量由最差的那个服务所决定。 数据库也需要做相应的隔离:避免非关键业务把数据库拖死,进而导致全站不可用。不允许直接读取对方的数据库进行系统交互,只允许通过服务接口进行系统交互。这也是微服务的要求:拆分服务和相应数据库。 应避免服务间的循环调用,如果产生循环引用,需要通过架构层面解决循环问题,避免因循环引用导致的系统奔溃问题。同时要对接口进行降级、限流控制,以应对系统的高并发。 4、微服务运维变得复杂 微服务的架构一般会包含基础层、中间件层、应用层、接入层、安全层,同时需要有相应的团队负责各层的运维。各层之间有比较明确的职责,共同支撑着整个系统的运行。一旦某个环节出现问题,整个系统就会像 “多米诺骨牌”一样倒下。因此需要统一的运维平台,实时监控服务调用链路,及时发现和定位问题。而建立统一的运维平台的成本和难度是相当之大的,目前也只有几家互联网大公司拥有这种能力。 5、系统监控变得复杂 对系统的监控依赖于系统的调用链路,链路中包含:http请求、服务间调用、消息队列、数据库、nosql、线程间调用等,如何将监控整个链路将变得非常困难,可能需要修改各中间件的请求数据包。 6、系统测试变得复杂 由于服务的依赖变得复杂,在进行系统测试时,要考虑服务间强弱依赖、降级、限流等问题。在进行压测时要考虑依赖的服务的性能。在制造测试场景时应充分考虑各服务的数据量,避免出现测试误差。 |
推荐了解热门学科
java培训 | Python人工智能 | Web前端培训 | PHP培训 |
区块链培训 | 影视制作培训 | C++培训 | 产品经理培训 |
UI设计培训 | 新媒体培训 | 产品经理培训 | Linux运维 |
大数据培训 | 智能机器人软件开发 |
传智播客是一家致力于培养高素质软件开发人才的科技公司,“黑马程序员”是传智播客旗下高端IT教育品牌。自“黑马程序员”成立以来,教学研发团队一直致力于打造精品课程资源,不断在产、学、研3个层面创新自己的执教理念与教学方针,并集中“黑马程序员”的优势力量,针对性地出版了计算机系列教材50多册,制作教学视频数+套,发表各类技术文章数百篇。
传智播客从未停止思考
传智播客副总裁毕向东在2019IT培训行业变革大会提到,“传智播客意识到企业的用人需求已经从初级程序员升级到中高级程序员,具备多领域、多行业项目经验的人才成为企业用人的首选。”
中级程序员和初级程序员的差别在哪里?
项目经验。毕向东表示,“中级程序员和初级程序员最大的差别在于中级程序员比初级程序员多了三四年的工作经验,从而多出了更多的项目经验。“为此,传智播客研究院引进曾在知名IT企业如阿里、IBM就职的高级技术专家,集中研发面向中高级程序员的课程,用以满足企业用人需求,尽快补全IT行业所需的人才缺口。
何为中高级程序员课程?
传智播客进行了定义。中高级程序员课程,是在当前主流的初级程序员课程的基础上,增加多领域多行业的含金量项目,从技术的广度和深度上进行拓展。“我们希望用5年的时间,打造上百个高含金量的项目,覆盖主流的32个行业。”传智播客课程研发总监于洋表示。
黑马程序员热门视频教程【点击播放】
Python入门教程完整版(懂中文就能学会) | 零起点打开Java世界的大门 |
C++| 匠心之作 从0到1入门学编程 | PHP|零基础入门开发者编程核心技术 |
Web前端入门教程_Web前端html+css+JavaScript | 软件测试入门到精通 |