科南软件CEO奉继承:基于微服务架构的原生云应用平台

2017-07-24 17:30:32

来源:CIO时代

  2017年2月19日,由CIO时代学院、中国新一代IT产业推进联盟主办,CIO时代网承办,北达软、中国通信工业协会两化融合委员、小云优选协办的“第七届中国云计算应用论坛”在北大中关新园成功举办。科南软件CEO奉继承博士在下午的活动中作了基于微服务架构的原生云应用平台的主题分享,以下为根据主题演讲的内容,整理而成。

\
  科南软件创始人兼CEO、教授

  今天会议的主题是原生云应用,安排这个主题很好,我认为云计算产业发展到今天,从应用层面真正发挥云计算的价值,还需要按照互联网和云计算的特性,实现应用层面的创新,这就需要原生云应用。

  我今天的分享内容,主要是就开发一个原生的云应用需要考虑哪些因素,从新型的软件研发模式、支撑云架构的平台和架构、工程管理等三个方面来阐述。

  一、原生云应用是信息化创新的必然需求

  云计算炙手可热,各地大力建设各种云计算中心、宝博棋牌中心等,资本市场对云产业的投资热情不减。但真正的云应用能够发挥其价值,目前还是在IaaS层面,即基础设施的服务,包括服务器、存储等。平台和应用层面,目前还面临比较大的挑战,主要因为目前主流的架构平台、开发工具、应用软件都是在云计算技术出现之前的,单体架构和单实例的运行模式,很难将云计算的资源弹性分配、大规模分布式负载均衡、微服务架构等方面的优势发挥出来。

  我认为原生云应用的盛行,首先表现为信息化模式变革引出的新需求。传统信息化的特点是缺乏整体架构和平台的应用组合,各个应用都有独立的后台架构、独立的数据库、独立的应用服务器和独立的客户端程序,从而形式烟囱式的信息孤岛,需要复杂的SOA集成平台实现系统间的互联互通。信息化建设采用这些大而全的系统、复杂的套装软件,产品标准化,通过所谓的“最佳实践”而进行的流程重组,实施周期长,成本高,适应变化能力差。这种信息化建设模式是适应经济活动比较成熟、市场相对稳定环境下的产物。

  而互联网时代,新型商业模式不断出现,竞争趋于激烈,市场快速变化,企业需要更加灵活的组织和流程,因此未来的信息化将逐渐向平台化、微服务化、个性化方向发展。而企业信息化的平台化,核心平台就是云计算平台,包括基础设施的统一平台、系统软件及应用开发平台,特别是统一的数据架构与平台,在此基础上通过应用的微服务化,实现业务的解耦,通俗的说法,就是碎片化。

\

  因此,这就需要大量设备、海量日志、更多碎片化应用以及无处不在的数据采集。新一代的平台架构面临新的需求,以满足新的用户体验、新的业务模式、云中心的大规模负载,新的需求包括1)与传统应用和基础架构有机集成;2)宝博棋牌量的实时交易处理;3)大并发用户的实时处理;4)快速应用开发;5)原生云中心架构支持。

  我认为阻碍云应用的最大因素是传统应用不适应云架构。传统应用架构的特点是:PC终端;紧耦合的应用服务;单实例数据库;单一SQL技术;共享磁盘阵列;SOA进行孤岛整合;软件开发周期长。应对大并发和宝博棋牌量的处理,传统的垂直扩展方式无法满足,通过水平扩展的方式进行负载均衡是云时代的理想方案(基于X86的IaaS基础设施)。

  而原生云应用是指能够直接发挥云平台特性的应用,包括分布式、微服务、容器而快速部署,弹性计算等。

  二、基于云的软件平台与架构

  支撑原生应用开发的PaaS平台,不仅仅是提供数据库管理系统、应用服务器和其他系统软件的运行支撑环境,更重要的是支持微服务架构的开发、运行和运维管理的一个应用的支撑平台。

  微服务架构在某种程度上是把SOA架构进一步去从业务和技术层面的解耦,而解耦后的架构,将从应用层面、容器层面、连接层面、数据库存储层面通过多实例部署,包括应用实例、也包括数据管理实例。每个实例运行在一个虚拟机或者一个容器里,才能真正发挥云的架构的弹性计算、资源池动态分配,大规模分部署负载均衡。

  因此,这样一个架构,其前端一定是针对不同的终端,包括移动终端、平板、智能终端等。通过BFF服务框架(Back end For Frontend Service)实现一套代码、一个运行引擎实现各种终端操作系统环境与终端屏幕尺寸、布局风格,实现全终端的自适应。

\

  原生云应用支撑平台的后台是一个分布式应用的架构。

  实现分布式负载均衡、多实例部署的架构主要有三个维度的解决方案,也是传统应用的解耦的三个维度。一是一个功能分解,也就是一个封闭的复杂应用,可以分解为更小颗粒度的微服务,每个微服务可以独立开发、独立部署、独立运行。二是复制和负载均衡,一个任务可以在自动判断,运行在两个或多个实例中,多容器、微服务的部署架构。三是数据的解耦,在微服务架构中,每个虚拟机、每个容器处理性能都不足以支撑一个庞大的数据库时,在应用中就要采用分库分表,来处理大规模的数据管理问题,这个规模可能是连接用户数的规模,也可能是数据量的规模。分库、分表之后,还需要解决数据的一致性问题,事务的完整性,这就成为PaaS平台的难点。

  如果没有在数据处理层面解决这个问题的,就很难说是一个真正的分布式系统。传统PaaS平台,仅通过虚拟机、容器技术只能解决数量庞大、互不关联的小负载应用,而不能解决应用数量少,每个应用的用户数和宝博棋牌量的高负载应用。这就需要从SaaS到PaaS、IaaS三各技术层面协同解决这个问题。

\

  应用解耦和微服务化之后,要实现应用的端到端的业务流程,实现事务的完整性,就需要在统一数据架构上来实现。即可以通过多个微服务,共享同一个数据资源池。更好的解决方法,可以是通过异步消息实现微服务之间的解耦,保持微服务之间基本自治。

\

  三、基于云的软件研发模式

  要实现这个体系架构,若按传统软件开发模式,很难满足原生云应用的开发。传统软件开发面临的问题包括:1)需求阶段的原型与开发阶段的代码不能共享,造成周期长、需求理解的偏差大,开发工作量大;2)开发无法前后端分离,造成人员技能无法专业化,耦合度高,平台灵活性差;3)多终端适应性问题,造成平台依赖度高,开发维护复杂性增大,增加开发成本,用户体验不一致;4)非原生云应用,造成数据库受制于单实例,性能提升很困难,IaaS平台优势难发挥;5)代码开发工具与工程管理分离,造成项目工程管理复杂,效率低。

  支撑原生云应用开发的PaaS平台将从三个维度解决这个问题。一个维度是新型开发模式,具体包括五个方面:前后端分离;需求即开发;基于业务开发;云端开发;开发运营一体化(DevOps)。第二个维度是云架构的支撑平台,包括HTML5+响应式布局实现;全终端自适应;微服务架构;大规模分布式(去IOE)等。第三个维度是研发管理创新,包括一体化的平台管理;基于价值的绩效管理;以架构师为核心的团队管理;工程项目管理(需求,项目组协作);新的能力配置等。

  新的研发管理不仅为开发运维一体化。DevOps是从开发到运维,未来从需求开始,从业务设计开始到需求、设计、开发、测试、运营应该是一体化的平台。因此,新一代软件开发模式将从传统的CMMI模型,转化为更加敏捷的简化开发过程,因为只有简化过程后才能提高效率,简化过程一定需要将迭代周期压缩,从而形成全新的开发模式。

  第一是基于云端的开发。基于云端的开发,包括开发环境在云端、代码在云端、协作在云端、测试发布在云端、部署在云端。未来开发人员可能在客户现场开发、在家开发、异地开发等。

  第二是前后端分离的开发。前后端分离包括三个方面的含义。1)软件代码分离。前端代码和后端代码是可以分离。这个很重要,因为现在终端数量很多、终端平台很多,如不能很好解决前后端分离,对软件开发者造成很大的困难。前后端代码分离,可以使得前端代码面向用户体验,后端代码面向业务逻辑。但传统软件的开发模式和框架,从早期的C/S架构,到B/S/S架构,到MVC,都没有很好解决这个问题。

  2)开发人员分离,即开发前端开发业务的设计和后端的代码开发人员要分离。因为前端更多的是用户体验,交互设计和UI的风格,而后端更多的是核心数据管理技术,JAVA业务对象和服务组件的开发。前后端开发人员的技术和能力要求也不同。

  3)进度分离。通过前后端分离的架构技术与开发模式。前端开发可以在需求阶段,通过设计工具和建模工具完成最终用户看到的交互式开发,可以在需求现场进行快速的数据、界面、流程、报表等应用进行现场开发,而后台开发可以在前端交互沟通确定之后,再逐步补充完善。因此便衍生出基于业务的开发。

\

  第三是基于业务的软件开发。我理解的微服务架构与SOA架构最大的区别,在于业务的解耦颗粒度不同。

  在微服务架构中解耦的可以从两个维度进行。一是业务功能的维度,包括业务对象、交付前端界面、后台的业务逻辑、业务流程和业务报表,这是最终用户看到的体验。二是不同的角色维度,不同角色提供个性化服务;应用场景维度,应用的工作场景,使用方式;组织层次,从组织架构维度分析业务应用。

\

  第四是需求即开发。通过上面的多维度分解、解耦或碎片化应用,配合模型驱动架构(MDA)的建模工具和开发工具,可以实现需求即开发。传统软件开发国产,需求阶段的成果是文档,而写一个再好的word文档不如画一个界面图。因此,现有的大量界面设计原型工具,但原型工具的界面设计,在开发阶段需要前端开发人员再通过HTML5以及JS语言全部重新设计。原型界面设计,与基于模型的交互设计工具是不同的,未来的开发环境一定会将原型设计工具,发展成为可以最终交付代码的模型开发工具发展。

  后台开发业务逻辑、关键算法变得简单,开发工作量大大减少,在进度、时间上都可以分头进行。

\

  四、基于云的研发工具与管理

  在新的开发模式和新的架构下一定要有新的开发工具、新的开发管理体系,因此尝试探索在这种理念下做一个微服务架构的PaaS平台,即科南CoAPP原型云应用开发平台。

\

  CoApp开发平台由三部分组成:面向业务开发的设计工具、平台组件与基础服务、工程管理工具等。

  CoApp设计工具提供各种设计工具简化应用的开发和部署,UI设计器简化UI效果的制作,模型设计器用于设计满足系统模型的业务组件,流程设计器用于整合业务流程流转、开发工具则帮助业务逻辑的实现和应用调试。

  CoApp平台组件与基础服务提供安全和存储、核心组件和引擎,各种技术组件简化应用的构建,同时提供统一的核心模型、应用交互层和业务共享层,能加快企业业务的迭代和发展,为企业的创新发展赢得先机。

  CoApp工程管理工具还包括流程管理机制,从应用的自动构建、自动测试、自动打包、到持续部署等自动化的软件工程工具,在技术上引入PaaS的运维思路,使得平台本身保持迭代、持续保存技术先进性。

  从以上分析可以看出,要解决原生云应用的开发问题,必须从开发模式与架构、开发工具与平台、团队与工程管理技术等三个维度系统性解决。

  基于微服务架构的原生云应用开发的过程是基于一个统一的平台,而这个平台中就真正的从架构层面、开发模式、工具层面、工程管理等层面进行综合考虑,实现原生云应用的开发。

\

  这是我的一些思考和探索,希望对大家有所启发。



相关资讯

“第二期华南CIO同学分享会”成功举办

2020-07-30

“第二期华南CIO同学分享会”成功举办

2020-07-30

杨学山:应用的性能需求与技术架构变革

2020-07-28

中台辨析:架构的演进趋势

2020-04-27
博评网