专业 靠谱 的软件外包伙伴

您的位置:首页 > 新闻动态 > 微服务的软件开发架构选择

微服务的软件开发架构选择

2016-04-23 11:37:08

从微服务说起

微服务架构(MSA)是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。你可以将其看作是在架构层次而非获取服务的类上应用很多SOLID原则。

用通俗的话来讲,就是为了高度解耦软件之间的依赖性,使每个独立的模块都能够单独测试,单独运维,最大限度的提高软件的开发流程。从下图可以看一下微服务的软件生命周期。

image

软件从需求分析就可以适配模块,也就是说需求分析的过程就可以加入设计,从新的角度来说就是在哪个模块中进行升级开发,开发人员在开发完成后,通过持续集成,将开发的结果发布到测试环境中供测试人员使用,在反复测试后,可以将测试完成的版本部署到线上环境,并且持续运维,使整个流程效率最大化。

其实不只是互联网业务,对于给客户提交的传统型业务也非常适合使用微服务。

下面说一下相关的技术框架,现在主要是java和go两种语言特别适合:

 

Spring Boot

spring-boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。

多年以来,Spring IO平台饱受非议的一点就是大量的XML配置以及复杂的依赖管理。在去年的SpringOne 2GX会议上,Pivotal的CTO Adrian Colyer回应了这些批评,并且特别提到该平台将来的目标之一就是实现免XML配置的开发体验。Boot所实现的功能超出了这个任务的描述,开发人员不仅不再需要编写XML,而且在一些场景中甚至不需要编写繁琐的import语句。在对外公开的beta版本刚刚发布之时,Boot描述了如何使用该框架在140个字符内实现可运行的web应用,从而获得了极大的关注度,该样例发表在tweet上。

然而,Spring Boot并不是要成为Spring IO平台里面众多“Foundation”层项目的替代者。Spring Boot的目标不在于为已解决的问题域提供新的解决方案,而是为平台带来另一种开发体验,从而简化对这些已有技术的使用。对于已经熟悉Spring生态系统的开发人员来说,Boot是一个很理想的选择,不过对于采用Spring技术的新人来说,Boot提供一种更简洁的方式来使用这些技术。

在追求开发体验的提升方面,Spring Boot,甚至可以说整个Spring生态系统都使用到了Groovy编程语言。Boot所提供的众多便捷功能,都是借助于Groovy强大的MetaObject协议、可插拔的AST转换过程以及内置的依赖解决方案引擎所实现的。在其核心的编译模型之中,Boot使用Groovy来构建工程文件,所以它可以使用通用的导入和样板方法(如类的main方法)对类所生成的字节码进行装饰(decorate)。这样使用Boot编写的应用就能保持非常简洁,却依然可以提供众多的功能。

至于体验spring boot的极速,这里就不表述了,对于微服务提出的无状态、消息集成都可以看实际的相关例子,相信会有更深刻的理解。

 

 

Spring Data JPA

Spring 框架对 JPA 提供的支持主要体现在如下几个方面:

  • 首先,它使得 JPA 配置变得更加灵活。JPA 规范要求,配置文件必须命名为 persistence.xml,并存在于类路径下的 META-INF 目录中。该文件通常包含了初始化 JPA 引擎所需的全部信息。Spring 提供的 LocalContainerEntityManagerFactoryBean 提供了非常灵活的配置,persistence.xml 中的信息都可以在此以属性注入的方式提供。

  • 其次,Spring 实现了部分在 EJB 容器环境下才具有的功能,比如对 @PersistenceContext、@PersistenceUnit 的容器注入支持。
  • 第三,也是最具意义的,Spring 将 EntityManager 的创建与销毁、事务管理等代码抽取出来,并由其统一管理,开发者不需要关心这些,业务方法中只剩下操作领域对象的代码,事务管理和 EntityManager 创建、销毁的代码都不再需要开发者关心了。

这个也就是传统意义上的DAO层和一部分SERVICE层的封装,大大的简化了开发工作。

 

Spring Data Rest

Spring Data REST是Spring Data项目的一部分,通过它可以轻松将基于JPA的库作为RESTful末端。

Spring Data REST项目的目标是通过使用简单的HTTP REST语义,为实现CRUD(Create Read Update Delete,增查改删)操作到你的JPA库管理的实体中提供一个坚实的基础。

那这东西跟Spring MVC是什么关系呢,开发者可以轻松在现有的Spring MVC应用程序中集成Spring Data REST,只需在Spring MVC配置中添加一个bean,好吧,就是这么简单。

以上基本上覆盖了微服务开发的各个层次,逻辑关系如下图:

image

说完了java,再来看看go,

 

beego

beego是一个快速开发Go应用的http框架,作者是SegmentFault 用户,go 语言方面技术大牛。beego可以用来快速开发API、Web、后端服务等各种应用,是一个RESTFul的框架,主要设计灵感来源于tornado、sinatra、flask这三个框架,但是结合了Go本身的一些特性(interface、struct继承等)而设计的一个框架。

如果想了解这个框架,可以从它的官网来查看:

http://beego.me/

好吧,开发文档几乎覆盖了所有的开发规则,所需要做的就是学习一下go的语法,然后go吧。

关于beego的介绍:

http://beego.me/docs/intro/

 

总结

微服务为系统带来方便的同时,也会带来一些问题,测试一个基于微服务架构的应用也是很复杂的任务。比如,采用流行的Spring Boot架构,对一个单体式web应用,测试它的REST API,是很容易的事情。反过来,同样的服务测试需要启动和它有关的所有服务(至少需要这些服务的stubs)。再重申一次,不能低估了采用微服务架构带来的复杂性。

另外一个挑战在于,微服务架构模式应用的改变将会波及多个服务。比如,假设你在完成一个案例,需要修改服务A、B、C,而A依赖B,B依赖C。在单体式应用中,你只需要改变相关模块,整合变化,部署就好了。对比之下,微服务架构模式就需要考虑相关改变对不同服务的影响。比如,你需要更新服务C,然后是B,最后才是A,幸运的是,许多改变一般只影响一个服务,而需要协调多服务的改变很少。

最后,重要的事情说三遍:不能低估了采用微服务架构带来的复杂性、不能低估了采用微服务架构带来的复杂性、不能低估了采用微服务架构带来的复杂性。

关于:中科研拓

深圳市深圳市中科研拓科技有限公司专注提供软件外包、app开发、智能硬件开发、O2O电商平台、手机应用程序、大数据系统、物联网项目等开发外包服务,十年研发经验,上百成功案例,中科院软件外包合作企业。通过IT技术实现创造客户和社会的价值,致力于为用户提供很好的软件解决方案。联系电话400-0316-532,邮箱sales@zhongkerd.com,网址http://www.zhongkerd.com


  上一篇   [返回首页] [打印] [返回上页]   下一篇