聊聊微服务架构与应用

>>微服务架构

随着敏捷开发、持续交付以及基于Docker的应用部署的发展,微服务结构开始慢慢流行起来。

>>应用架构演进

(1)垂直应用架构

传统的LAMP架构和Spring+Struts+iBatis/Hibernate的架构都是典型的垂直应用架构,垂直应用架构学习成本低,开发产出快,测试、部署和运维比较简单,在过去的十几年中一直比较流行。
但是随着业务的发展,垂直应用架构逐渐暴露出一些缺陷,以Spring MVC架构为例,可能的表现:
1.复杂应用的开发维护成本越来越高,测试变得困难,部署效率越来越低。
2.团队沟通成本上升,协作变差,难以保证代码质量。
3.类似木桶效应,由于一些短板的存在,系统性能难以保证。
4.维护和定制变得困难,新功能上线周期变长,难以实现快速迭代。

(2)RPC架构

当垂直应用越来越多,应用之间交互不可避免,RPC可以提高业务复用及拆分。
当应用大规模服务化之后,会面临许多服务治理方面的问题。

(3)SOA服务化架构

SOA是一种粗粒度、松耦合的以服务为中心的结构,接口之间通过定义明确的协议和接口进行通信。

(4)微服务架构

微服务是一种服务化架构风格,通过将功能分散到各个离散的服务中以实现对解决方案的解耦。

>>微服务架构解析

(1)微服务的架构

微服务是指开发一个单个小型的但有业务功能的服务,每个服务都有自己的处理和轻量通讯机制,可以部署在单个或多个服务器上。
微服务也指一种种松耦合的、有一定的有界上下文的面向服务架构。也就是说,如果每个服务都要同时修改,那么它们就不是微服务,因为它们紧耦合在一起。

(2)微服务架构对比SOA

两者的主要差异如下:
1.服务拆分粒度
2.服务依赖
3.服务规模
4.架构差异
5.服务治理
6.敏捷交付

>>微服务架构的优点和缺陷

微服务的优点和缺陷就像一枚硬币的两面,要根据项目的实际情况合理的决定选用哪种架构。

(1)微服务的优势显而易见

1.避免系统无限膨胀
每个服务都很简单,只关注于一个业务功能,规避了原本复杂度无止境的积累。每一个微服务专注于单一功能,并通过定义良好的接口清晰表述服务边界。
2.独立部署
由于微服务具备独立的运行进程,所以每个微服务也可以独立部署。
3.微团队独立开发,扁平化管理
由于体积小、复杂度低,每个微服务可由一个小规模开发团队完全掌控,易于保持高可维护性和开发效率。
4.可以通过不同的编程语言与工具进行开发
不同的模块之间不用关系具体实现。
5.更好的扩展性
单块架构应用也可以实现横向扩展,就是将整个应用完整的复制到不同的节点。当应用的不同组件在扩展需求上存在差异时,微服务架构便体现出其灵活性,因为每个服务可以根据实际需求独立进行扩展。

7.容错性
当某一组建发生故障时,在单一进程的传统架构下,故障很有可能在进程内扩散,形成应用全局性的不可用。在微服务架构下,故障会被隔离在单个服务中。若设计良好,其他服务可通过重试、平稳退化等机制实现应用层面的容错。

(2)微服务架构的一些缺点

1.分布式系统的复杂性
作为一种分布式系统,微服务引入了复杂性和其他若干问题,比如网络延迟、容错性、消息序列化、不可靠的网络、异步、版本化、应用层中的负载变化等等。

2.代码重复
微服务强调小规模团队独立开发,不建议使用全局的公共类库。会在一定程度上造成代码重复。

3.测试繁琐
相比垂直应用架构,微服务的分散部署使测试变得繁琐。

>>微服务架构最佳实践

(1)使用分布式和自动化进行微服务运维

利用分布式系统的性能线性增长和弹性扩容能力,支撑大规模微服务对运维系统带来的冲击。
主要的如分布式性能数据和日志采集系统;
分布式汇总和计算框架;
分布式文件存储服务;
分布式日志检索服务等。

(2)基于Docker的容器化部署

内容来自笔记整理:
《分布式服务框架原理与实践》李林峰
微服务实战:微服务架构的优势与不足

时间: 2024-10-14 05:41:39

聊聊微服务架构与应用的相关文章

从 Spring Cloud 开始,聊聊微服务架构实践之路

[编者的话]随着公司业务量的飞速发展,平台面临的挑战已经远远大于业务,需求量不断增加,技术人员数量增加,面临的复杂度也大大增加.在这个背景下,平台的技术架构也完成了从传统的单体应用到微服务化的演进. 系统架构的演进过程 单一应用架构(第一代架构) 这是平台最开始的情况,当时流量小,为了节约成本,并将所有应用都打包放到一个应用里面,采用的架构为 .NET SQL Server: 表示层:位于最外层(最上层),最接近用户.用于显示数据和接收用户输入的数 据,为用户提供一种交互式操作的界面,平台所使用

聊聊微服务架构实践之路的4大挑战,3月31日见真章!

当容器化的兴起,为应用开发部署带来变革,也为应用设计架构和运维部署带来变化: 当持续交付.DevOps.微服务,成为企业在软件成果对抗当中胜出的有力武器,微服务架构已经随处可见: 但随之而至的是微服务框架.微服务监控.微服务配置.微服务治理等一系列挑战, 从架构到发布,挑战重重,该如何应对容器化微服务架构的各种技术难题? 2018年3月31日,数人云联合ServiceComb社区,开启Building Microservice 系列活动 第2期 北京站 带你了解最新的微服务开源框架, 解析微服务

你所不了解的微服务架构

一直以来,系统的架构设计是IT领域经久不衰的话题,也是构建每一个系统最核心且重要的部分之一.它决定了系统能否满足业务.技术.组织.灵活.可扩展性等多种要求,同时肩负起了解放程序员生产力的作用. 2016年底,由于业务的不断发展,我所在公司维护的项目也越来越"臃肿".随着无数个版本的迭代,以及开发人员的不断增加,开发效率越来越低,每次投产的人力成本和时间成本都逐渐增加,我们一直在思索如何能破局.评估了各种方案后,最终微服务进入了我们的视野. 谈到微服务,大家众说纷纭,但却很难有一个清晰的

Re:从 0 开始的微服务架构--(四)如何保障微服务架构下的数据一致性--转

原文地址:http://mp.weixin.qq.com/s/eXvoJew3bjFKzLLJpS0Otg 随着微服务架构的推广,越来越多的公司采用微服务架构来构建自己的业务平台.就像前边的文章说的,微服务架构为业务开发带来了诸多好处的同时,例如单一职责.独立开发部署.功能复用和系统容错等等,也带来一些问题. 例如上手难度变大,运维变得更复杂,模块之间的依赖关系更复杂,数据一致性难以保证,等等.但是办法总是比问题多,本篇文章就来介绍一下我们是如何保障微服务架构的数据一致性的. 微服务架构的数据一

Re:从0开始的微服务架构--(二)快速快速体验微服务架构?--转

原文地址:https://mp.weixin.qq.com/s/QO1QDQWnjHZp8EvGDrxZvw 这是专题的第二篇文章,看看如何搭建一个简单模式的微服务架构. 记得好久之前看到一个大牛说过:如果单体架构都搞不好,就别搞微服务架构.乍一看,这句很有道理,后来发现这句话是不太对的,因为微服务架构的目的就是为了降低系统的复杂性,所以 微服务架构应该比单体架构更简单.更好实践才对. 这篇文章,我们就分享一下如何搭建一个 简单模式 的微服务架构. 什么是微服务架构的简单模式? 相对于大型互联网

从 0 开始的微服务架构:(五)代码给你,看如何用Docker支撑微服务

很好的一篇文章,全面.系统. 虽然已经红了很久,但是"微服务架构"正变得越来越重要,也将继续火下去.各个公司与技术人员都在分享微服务架构的相关知识与实践经验,但我们发现,目前网上的这些相关文章中,要么上来就是很有借鉴意义的干货,要么就是以高端的专业术语来讲述何为微服务架构.就是没有一个做到成熟地将技术传播出来,同时完美地照顾"初入微服务领域人员",从 0 开始,采用通俗易懂的语言去讲解微服务架构的系列.所以,我们邀请青柳云的苏槐与 InfoQ 一起共建微服务架构专题

从 0 开始的微服务架构:(四)如何保障微服务架构下的数据一致性

虽然已经红了很久,但是"微服务架构"正变得越来越重要,也将继续火下去.各个公司与技术人员都在分享微服务架构的相关知识与实践经验,但我们发现,目前网上的这些相关文章中,要么上来就是很有借鉴意义的干货,要么就是以高端的专业术语来讲述何为微服务架构.就是没有一个做到成熟地将技术传播出来,同时完美地照顾"初入微服务领域人员",从 0 开始,采用通俗易懂的语言去讲解微服务架构的系列.所以,我们邀请青柳云的苏槐与 InfoQ 一起共建微服务架构专题"Re:从 0 开始

如何保障微服务架构下的数据一致性

1.微服务架构的数据一致性问题 以电商平台为例,当用户下单并支付后,系统需要修改订单的状态并且增加用户积分.由于系统采用的是微服务架构,分离出了支付服务.订单服务和积分服务,每个服务都有独立数据库做数据存储.当用户支付成功后,无论是修改订单状态失败还是增加积分失败,都会造成数据的不一致. 为了解决例子中的数据一致性问题,一个最直接的办法就是考虑数据的强一致性.那么如何保证数据的强一致性呢?我们从关系型数据库的 ACID 理论说起. 关系型数据库具有解决复杂事务场景的能力,关系型数据库的事务满足

一个可供中小团队参考的微服务架构技术栈

一个可供中小团队参考的微服务架构技术栈 聊聊架构 2018-05-07 作者 杨波 作者 |  杨波编辑 |  张浩 近年,Spring Cloud 俨然已经成为微服务开发的主流技术栈,在国内开发者社区非常火爆.我近年一直在一线互联网公司(携程,拍拍贷等)开展微服务架构实践,根据我个人的一线实践经验和我平时对 Spring Cloud 的调研,我认为 Spring Cloud 技术栈中的有些组件离生产级开发尚有一定距离.比方说 Spring Cloud Config 和 Spring Cloud