PaaS服务之路漫谈(三)

摘要:
因此,MSA(微服务架构)模型可以在很大程度上避免单片架构在大规模服务应用中的一些缺陷。但现在每个公司都想使用一些微服务来完成产品开发。在MSA(微服务架构)的日常工作中,普通开发人员或新手基本无法完全了解系统的内部运行模式,经常在没有完全了解业务的情况下修改一些代码并引入其他关键部分。只有根据需求尽可能将功能分解为离散服务,才能实现服务之间的解耦。

此文已由作者尧飘海授权网易云社区发布。

欢迎访问网易云社区,了解更多网易技术产品运营经验。


Monolithic架构在产品访问量很大的情况下,有可能常会导致整个产品迭代或升级过程不能按预期进行,或者上线风险的不确定性导致上线时常常信心十足。那么MSA(微服务架构)的模式能在很程度上避免Monolithic架构在规模服务应用下的一些缺陷。


微服务架构这个词语出现的较早,其实公司的很多产品也是这么开发和运行的,直到ThoughtWorks的专家讨论过微服务后。Fred George,、James Lewis,Martin Fowler通过专门写博文讨论微服务,才使得微服务变成了下一个时髦术语,但实际上大量的论文也没有划分什么才是真正的微服务,但现在每个公司都想使用一些微服务来完成产品的开发。


MSA(微服务架构)

在日常的工作中,我们有可能会有机会接触到运行很多早的大型的遗留系统,除了特别强大的牛人之外,一般的开发人员或者新人基本上无法全面的理解系统内部的运行方式,如果又有新的功能要及时上线 ,那么处理遗留代码的风险就很高了,经常会出现在对业务理解不全面的情况下修改了某处代码而引入其他关键的部分。日前有些业务团队确定就遇到了这样的问题,基本通过微服务能较好的解决这个难题,可能按最新的框架模型编写一些小的服务组合起来,完成业务流程,等所以的业务都能够覆盖全面时,那么老的系统基本上就可以下线了。


微服务其实只是一种新的架构概念,没有什么新的东西,也没有明确的范围定义,只是通过将功能尽可能的按需求分解到各个离散的服务中从而达到各服务间的解藕,甚至可以简单的看成一个个非常小的Monolithic架构组合。


微服务是一种简单的应用,每个服务基本上只完成自己角色的任务,没有额外的业务代码,有些甚至一个算法实现都可能当做一个服务来发布,比如之前Pomelo游戏框架的地图的AOI服务,这些服务基本简单到只能完成一个功能,非常的轻量级和容易理解,公司内的新的项目有些目前基本上采用这样服务化的方式来实现的,只是将一些业务代码简单的包装通过通信层较好的完成服务调用。


这种架构的方式的实现方式如下:


Alt pic


相对于前文中的Monolithic架构模式中提到的应用软件开发的非功能要求,这些微服务的架构有什么区别呢?


没错,这种MSA架构实现方式与SOA的模式非常相似,有些人会认为基本上一样的,但是微服务还是有一定的区别的,SOA的架构早期的采用ESB这种企业总线的方式来实现,里面包括了很多业务规则,消息路由,很多是采用重型的中间件来实现的,整体对开发人员不是很透明,查问题的效率也不是很高。微服务更加轻量级,所有的操作可能直接通过消息传递的方式来实现,中间件只是消息的搬运工,不会对消息进行任务处理。


采用这种架构模式的优势是:


  • 轻量级 每个开发者都能容易理解;相关开发工具对小应用也也较好的支持,而不管相关的机器的配置;整个过程无论是编译,部署过程都很轻量级,这将使用开发人员,测试人员和运维人员工作效率更加高效。

  • 易升级 每个服务都可以独立部署,只要输入输出一致,各服务可以更新的完成运维。

  • 易上手 由于代码简单,无论是新入职的员工还是顶替的角色都能较好的现在业务逻辑,每个组都能独立工作,减少和其他的组的沟通的开销。

  • 容错性,每个服务独立部署,某一个服务的失败不会影响整体的业务不可访问,能大大提高用户的SLA服务时间,提高用户的体验。

  • 易扩展 由于每个服务都有对应的资源需求,很少会引起资源竞争,比如各个服务可以连接不同的数据库来完成对数据库的依赖。

  • 易运维 通过复制多份的方式来实现模向扩展,负载均衡完成请求路由。

  • 易掉头 微服务能较好的随时使用新技术,新的框架带来的红利,而不用受到技术债的影响。


当然,随着系统服务的逐步细化和扩大,每个服务单独部署,微服务架构的一些问题也暴露出来了:


  • 由于每个服务的单独部署,按照日前云计算的使用方式,每个服务都申请一台云主机来部署,将造成大量的工作时间化在沟通和交流上,包括主机的申请,初始化和权限申请等,其次每个产品要申请大量的云主机来服务,数量将成指数级别增长,从来进一步带来运维管理等相关问题。

  • 资源的使用方式,微服务采用云主机部署的方式也将使用资源的利用不充分,造成很多的资源浪费,包括内存,磁盘等,以前只有运行一个JVM就能跑起来的服务,现在可能需要运行多个JVM才能完成。

  • 关键性业务复杂,对于一些业务要求很高的场景,比如订单支付之类的服务会引入分布式事务的复杂操作,日前我们公司也开发了TCC的分布式事务来处理这类问题。

  • 分布式系统 通过服务调用,至少增加了一层的开销,当然这种开销一般情况下基本可以忽略,服务端调用除了业务的逻辑之外要的开销非常小;除此之外还需要明确了解自己的业务类型,这样才能更好的根据业务类型部署运行不同类型的主机上。

  • 测试困难 开发人员在完成自己代码开发后,由于涉及到各个系统的业务,因此实现的不同的测试用例要跨不同的服务来编写,同时由于分布式事务之类的操作,导致测试场景更加复杂,对于服务的测试需要测试人员编译相关的测试接口和集成测试用例来完成,因此对测试人员的要求会更高。

  • 部署复杂 运维人员部署不同的类型的服务需要了解不同的部署方法,由于服务的部署复杂,对应带来的协调管理成本也会相应的增加,如何高效的实现服务部署的自动化就变得非常的严峻。通过DEVOPS技术来减少和防止由于繁烦的配置导致事故。


通过二种架构方式的对比,采用何种架构方式来完成应用的部署对于技术负责人或架构师来说也是一个非常有挑战性的难题,一般在项目的初期或业务上线DEADLINE的需求下,会采用前者架构来快速实现,在项目初期一般也不会遇到非常大的访问量的应用的,同时细化,全分布化服务化的架构也会导致开发速度变慢。而如果业务快速发展,项目的技术架构债也会更加重,需要人员来完成服务化的架构改造来适用业务的发展。因此何时采用架构模式需求根据项目的业务需求和实际的能力来决定,当其他的系统不能很好的服务于项目或不能满足项目的生态需求时,这也是负责人或架构师的职责所在。


同样,在项目开发,测试和上线时,不同的架构模式需要使用不同的部署工具来实现高效的自动部署,尽量减少各人员的沟通和管理等成本,专业人员只要把注意力放在自身的业务范围内,为项目的上线实现工作自身的价值。对于Monolithic架构的应用,我们的自动部署平台系统(http://omad.hz.netease.com)  能较好的担当这类角色,但是对于MSA服务架构的项目,自动部署平台系统尽管也能部署,但是也会遇到上面提到部署问题,比如:主机数量爆炸式的增长带来的管理成本,对资源的合理使用等。如何解决这些问题,需要大家一起努力来解决,特别是如果和GOOGLE一样每周需要20亿个服务部署的时候,我们对应的服务能跟上业务的需求不?我们的PaaS的服务能否很好的面对这些挑战?作好准备了吗?


后续本文将继续介绍其他公司的服务化解决方案,包括ebay,Amazon,淘宝等国内外,随后也将详细介绍我们的实现方案和具体做法,敬请期待。


其实,我们的PaaS服务化之路刚刚开始; 其实,我们的PaaS服务化之路已经开始;


最后,PaaS可能是一套开发、测试、运维的规范和流程的实战总结,也可能是系统化的工具组合,但业务和技术是不断变化的,没有那个理论和工具能一劳永逸地回答和解决所有问题,只有最好,只有适合,所以PaaS也不是银弹。期待大家提供高见建设我们的PaaS服务之路!


参考:



PaaS服务之路漫谈(一)

PaaS服务之路漫谈(二)


网易 云计算基础服务 深度整合了  IaaS 、 PaaS  及容器技术,提供弹性计算、 DevOps  工具链及微服务基础设施等服务,帮助企业解决  IT 、架构及运维等问题,使企业更聚焦于业务,是新一代的云计算平台, 点击可免费试用 。 


相关文章:
【推荐】 容器平台选型的十大模式:Docker、DC/OS、K8S 谁与当先?
【推荐】 年轻设计师如何做好商业设计

免责声明:文章转载自《PaaS服务之路漫谈(三)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇js获取mac地址(续)解决mongodb的安装mongod命令不是内部或外部命令下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

远程桌面无法登录:由于帐户限制,无法让你登(访问局域网某台电脑时提示:无法访问,你可能没有权限使用网络资源.的解决办法 !!)

方法一:将你所要远程连接电脑的登录账号设置为非空密码。 方法二:在远程计算机上启动“组策略编辑器”(开始-运行-GPEDIT.MSC),在“计算机配置-WINDOWS设置-安全设置-本地策略-安全选项”里找到“使用空白密码的本地帐户只允许进行控制台登录”,将其设置为“已停用”。 在远程桌面的不能复制文件或文字到自己桌面? 用services.msc 能看到...

何谓系统架构师(转)

首先,何谓系统架构师? IBM工程师的说明是:    架构师的主要责任是提供开发人员和项目经理之间的共用沟通媒体。他们负责让业务规则及需求与工程实践及限制相适应,以确保成功 中文Wiki上的说明是:    系统架构师负责设计系统整体架构,从需求到设计的每个细节都要考虑到,把握整个项目,使设计的项目尽量效率高,开发容易,维护方便,升级简单 这两个解释,加起来...

【架构】一、服务单元化

转载:https://mp.weixin.qq.com/s/jfbHvEMSZtgXis3AtSOZyw 一、为什么要做单元化 决策一个系统的整体架构方向,将对这个系统的未来产生深远影响,并且会有实际的技术改造方面的人力投入。这样的的决策必须是谨慎的,有依据的。所以,对于要不要单元化这个问题,这里最想告诉大家的是一个忠告:切勿神话单元化。 回顾支付宝的整个...

RPA-UiPath学习之启程

因公司需要将部分原人工的业务采用RPA技术进行替代,把我抓了壮丁。 于是我开始学习起RPA。 公司选择的是目前市场占有率最高的Uipath。 UiPath这个Studio工具,大概是采用wpf开发。 在uipath实现的项目可以有两个选择VB和C#,两者都是基于.NET FRAMEWORK生态下的。 所以,这对C# .NET程序员而言,学习成本相对很低。...

批量插入数据(基于Mybatis的实现-Oracle)

前言:做一个数据同步项目,要求:同步数据不丢失的情况下,提高插入性能。 项目DB框架:Mybatis。DataBase:Oracle。 ---------------------------------------------------------------------------- 批量插入数据方式: 一、Mybatis 全局设置批处理; 二、Myb...

图片上传——用一般处理程序实现

.Net 中如何实现图片上传 1、表单元素使用文件选择框<input  type ="file " />控件2、表单设置enctype="multipart /form-data ",本质上是设置浏览器提交表单的数据时,使用随机分隔符来分 割不同控件的数据,而且数据的组织形势由name=value 换成了数据头和数据体的方式 二、服务器端1、服...