Apache主席话开源之道,ServiceComb微服务创新实践解放开发者

Apache ServiceComb项目成立已经2周年,一路以来,社区遵循Apache Way,坚持中立、开放、多样化的原则,携手用户和开发者长足健康发展。

2019年,在认真听取社区声音后,社区推出5大创新新品项目,期望与用户和开发者一起思考如何共同去解决微服务中的难题,为更好地回馈社区用户和开发者,在Apache软件基金会成立20周年之际,Apache ServiceComb在HC2019华为全联接大会会场举办了“Apache开源开发详解”和“微服务创新实践解放开发者”社区活动。本文回顾了此次活动中嘉宾的精彩分享内容,以及用户和开发者聚焦的典型问题。

Apache软件基金会董事会主席Craig Russell、Apache孵化器管理委员会主席Justin Mclean两位重磅嘉宾出席了此次活动,并为中国的开源爱好者独家剖析Apache的开源开发之道,对国内开源开发者、在校同学在实践中遇到的困惑给出了独到的见解和建议。

同时,来自华为的Apache ServiceComb VP姜宁、Apache ServiceComb架构师马彬、华为云ServiceStage架构师王启军为大家分享了ServiceComb进入Apache的成长之路和趟过的那些坑、ServiceComb面向用户痛点创新的5个项目解读、华为云ServiceStage在微服务自动化拆分工具的创新实践,并对开发者关心的遗留应用向微服务转型如何拆分数据库/表、如何降低对底层开发框架的学习门槛快速实现微服务改造和开发、多厂商集成过程中可能出现的异构服务如何互通,以及多语言如何实现微服务转型等问题做了开放式的探讨。

Apache软件基金会董事会主席Craig Russell话开源之道

Apache之所以能够受到世界上众多开源开发者的青睐,并且长盛不衰的原因是什么呢?Apache软件基金会董事会主席Craig Russell结合Apache的使命和Apache之道诠释:

  • Apache是公益性组织,坚持“为公众利益提供免费的软件”的使命,使用商业友好的Apache协议,让整个世界的公众从中获益,并乐于接受所有人的捐赠。
  • Apache保持中立,不受任何企业或个人控制,注重构建社区并且为这些社区提供项目管理服务,是“一个基于协作,一个基于交流和共同打造伟大的软件的地方”。
  • Apache提供了对社区项目的治理之道Apache Way,它让社区和人们可以携手走在一起,来追求一个共同的目标,其核心理念是“社区胜于代码”,社区的位置放在首位,没有独裁者,由社区来决定什么才是正确的事情,并且每个人都可以通过参与社区贡献并获得功绩。

Craig Russell表示:Apache为众多开源爱好者提供了广阔的舞台,中国作为亚洲使用Apache软件最活跃的国家,越来越多的公司或个人项目加入到Apache回馈社区,社区也在积极地回馈每一位贡献者:免费的培训和学习平台,打造高质量的代码,合作与竞争的共赢平衡,并且使所有贡献者受到法律保护。

Apache软件基金会孵化器主席Justin Mclean谈成长为Apache顶级项目之道

在认识Apache之后,项目如何进入Apache孵化器发展,并最终毕业成长为世界顶级项目呢?Apache软件基金会孵化器主席Justin Mclean结合丰富的管理和实践经验,给出了非常中肯的建议:

  • 围绕项目建立社区,活跃的社区“可以自我纠正,应对各种挑战和问题”,社区沟通的原则倡导友善、尊重、信任和谦虚,Justin表示:“我们要信任,要假设其他人都是有善意的”。
  • 许可协议非常关键,它保障用户使用软件时不出现任何纠纷,同时也保护社区的商标、项目名字不被别人仿照,是合规性重要的一环,也是成为顶级项目的必要条件。
  • 发布版本,为了提供法律保护和发展社区,发布的流程需要确保符合Apache的流程和规定,并且必须由PMC投票。
  • 项目毕业,当一个项目具备自管理、独立发布的运作能力,并遵从Apache软件基金会的规则,建立好法律框架,不再需要孵化器组织或者导师的帮助,即满足从Apache孵化器毕业成为顶级项目的条件。

Apache ServiceComb VP聊项目成长之路和趟过的那些坑

作为Apache Member、Apache ServiceComb首席技术专家,姜宁老师也曾担任过Apache RocketMQ项目孵化阶段的导师,有丰富的实战经验,姜宁老师为大家分享了ServiceComb如何从零开始,并在1年内成长为首个Apache微服务顶级项目的经验:

  • 与Apache导师保持充分交流非常重要,在导师丰富经验的帮助下,可以更快速地了解和适应Apache规则和流程。
  • 充分利用好Apache邮件列表、JIRA等公共的沟通渠道,让更多的参与者了解项目、社区构建以及未来的规划,邮件列表归档的功能也能使刚进入社区的贡献者能快速找到每个事情的上下文,融入社区。
  • 项目捐赠给Apache之后,名字和商标不能在商业产品里面随便乱用。
  • 定期举行线上线下活动,为社区的参与者和开源爱好者提供互相交流的平台,有利于促进与其他社区、项目之间的合作和推广。
  • 鼓励大家参与,为社区贡献者留下适当的发挥空间,建立“帮扶”机制,让更多的人能够参与进来,壮大社区。
  • 抱着善意的心态去对待投票-1,因为每个-1意见都包含着参与者对社区的付出,并且从每次-1票中找出问题并改进。 -务必确保项目的每行代码的来源是清楚的,没有copy right和license的使用问题,这也是每次版本发布前需要重点检查的地方。

Apache ServiceComb架构师解读面向用户微服务痛点的创新项目

众所周知,微服务是一种架构理念,软件架构极大依赖于专家经验,而专家经验更多地是依赖口口相传或者文档传播,在企业向微服务转型过程中,有没有相应的软件或工具能够解放专家手脚、帮助开发者快速上手成为用户的关键痛点。

ServiceComb进入Apache以来,认真听取社区声音,确定了系列解决用户微服务化过程中痛点的方向,并且在社区里面继续创新孵化,于2019年推出5大新品项目解决微服务痛点问题,Apache ServiceComb架构师马彬解读了5个新品项目面向的场景、现状和下一步开发计划:

  • servicecomb-mesher,高性能服务网格框架,开箱即用、多语言、零侵入业务代码实现微服务化改造。

越来越多的企业开始向微服务架构转型,不同的企业使用的语言不同,甚至同一个企业由于业务差异、联合创新等因素,都有可能涉及使用不同的语言,而传统的微服务开发框架具有业务侵入性特征,无法满足多语言场景、异构框架的服务治理互通诉求。

servicecomb-mesher支持以sidecar的形态无业务侵入解决用户在多语言场景下的痛点问题,并且其始终遵循开放式的设计,支持接入云原生、运维、监控等流行生态,未来将在网关/生态/异构支撑等方面继续探索,帮助用户以最小化改造完成微服务转型。

  • servicecomb-toolkit,一键式微服务开发工具,自动化生成微服务工程、API、代码、文档,并支持API与代码一致性校验能力。

在集团型企业中,集成多个开发商应用的场景很常见,然而,不同的开发商存在开发语言、框架、习惯方面的差异,导致数据、服务标准不统一。

servicecomb-toolkit帮助用户快速构建基于ServiceComb和SpringMVC/Jax-RS/RPC等编程模型的微服务脚手架,提升遗留系统重构、全新微服务开发的效率,协同用户实现基于标准API数据、服务标准化管控。未来servicecomb-toolkit将在支持一键制作基于Spring Cloud的微服务脚手架、OAI V3规范、以插件集成到流行IDE方面做进一步的探索。

  • servicecomb-service-center/syncer,对用户透明的数据同步工具,使能异构、多服务中心数据互通。

多数据中心部署的企业,不同数据中心之间的服务数据如何互通?集成不同开发商的集团型企业,异构微服务开发框架实现的微服务如何互通?这些问题在传统企业做微服务化选型或改造过程中经常被提及。

ServiceComb syncer为此场景而设计,它提供数据同步能力,对用户透明,对多服务中心提供对等网络,并支持异构服务中心的数据转换和同步,使基于不同微服务技术栈实现的业务可以进行数据通信。未来,syncer将对跨云、跨数据中心等场景提供更完善的支持。

  • servicecomb-kie,语义型分布式系统配置中心,使运维人员通过易于理解的数据和入口,管理复杂的分布式系统配置。

传统的配置中心,多使用key:value数据模型(如:ServiceB.user.getUser.timeout=10s),key的规则只在该服务内生效,对于运维人员来说难以理解。而且随着规则定义的不断增长,key也会越来越复杂,对用户呈现也只有key/value单一视图,影响了可读性且不易于管理。

servicecomb-kie通过支持key(label):value的数据模型设计改进了用户配置方式(如:Timeout(service=serviceB, schema=user, operation=getUser):10s),通过key和label的组合提升了用户可读性,方便扩展变更,并且支持生成多角度的配置视图。未来,servicecomb-kie配置中心将在数据加密、对接k8s生态等方面通过更多支持,使用户更灵活选择方案。

  • servicecomb-fence,微服务认证鉴权框架,帮助用户快速构建微服务的认证鉴权能力。

典型的互联网应用不仅需要访问本应用的资源,还需要访问第三方的资源,同时还提供接口给第三方使用。应用的接入形式是多样化的,有手机,WEB客户端,API访问等。认证的方式包括用户名密码、手机验证码、人脸识别等。面对复杂场景,在微服务架构中,如何构建分布式、安全和高效的认证鉴权机制是用户关心的问题。

servicecomb-fence提供开箱即用的标准化认证流程框架代码,它结合Oauth2.0和OpenID Connect协议,实现Oauth 4种认证模型、Token和Session组合的认证机制,支持微服务内部认证鉴权、对接第三方认证鉴权服务、为第三方提供认证鉴权服务等应用场景,帮助用户快速搭建高性能、安全的微服务认证鉴权能力。

华为云微服务架构师谈“黑科技”微服务拆分创新实践

华为云在17年将商用了3年的微服务框架ServiceComb完全开源并捐赠给Apache之后,继续基于ServiceComb在微服务应用平台ServiceStage上提供商业云服务,并持续投入与创新,作为社区开发主力积极回馈社区。本次活动,华为云微服务架构师王启军为大家带来了解决用户最关心的微服务拆分痛点问题的创新实践。

  • 微服务自动拆分工具

对于用户和开发者来说,微服务改造第一大难题就是服务如何拆分。服务拆分需要考虑的方面很多,团队大小、交付周期、业务方向、故障范围、数据规模、吞吐量、一致性等都是影响拆分结果的因素,并且可能涉及业务、平台、DBA、测试、运维等多职能部门的协同。

微服务拆分并不是一个容易的工作,如果服务拆分不合理,会给用户带来服务数量爆炸而运维复杂、服务数量太少而不够灵活、接口频繁变更、系统架构复杂度提升等问题;如果是由经验丰富的架构师们来拆分服务,问题可能会减少很多,但是时间、人力成本也会剧增,而且并非所有的团队都拥有有经验的架构师。

综上所言,服务拆分成为遗留应用向微服务转型首要解决的难题。那么,是否有可能通过自动化的工具来替代人去实现一些业务分析、拆分工作,从而解放开发者手脚,降低微服务入门门槛呢?从最关键的拆分数据库/表的典型场景入手,华为云微服务团队开启了微服务自动拆分工具化的探索,通过从遗留应用中解析DAO对象、提取SQL语句和业务访问日志等客观指标的方法,提供自动拆表、微服务建模和生成代码的功能,工具具备的特征:

  • 当业务很复杂的时候,工具可以帮助用户自动梳理出业务逻辑和关联度。
  • 从数据库中的表关联关系和代码中model的关联关系我们能够分析出表之间的关联度。
  • 从表中的数据量和访问日志我们能够分析出业务的核心程度。

目前,微服务自动拆分工具已迈出第一步,具备作为辅助性工具支持微服务拆分的输入参考,后续将在支持搜集和分析更多相关指标(比如研发人员的数量、产品未来的发展方向、交付周期等等这些比较主观的因素)、提高自动化度、提高拆分精确度等方面做更深一步的探索和验证。未来,希望将微服务拆分工具开源出来,联合社区用户和开发者力量共同发展。

“到底工具能不能代替人去拆分呢?是能的,之所以说不能,是因为指标不够全面,不够准确。当我们掌握了足够的指标之后,工具比人做的决策更准确。但是,现在我们的指标还没有那么全面,那么准确,所以,现在工具更多的是辅助性的,但是,未来一定可以做到”王启军表示。

主题演讲精彩互动问答收录

在主题演讲结束后,现场与会的开源爱好者和微服务开发者与演讲嘉宾进行了积极的互动交流,小编摘录了社区用户和开发者最关心的典型问题:

Q1: 在中国,人们习惯使用微信交流,而Apache基金会项目是需要使用邮件列表交流的。我想请问在发展新用户的过程中,需要怎样处理这些习惯上的障碍? Justin Mclean: 其实很容易的,我觉得项目决策是很重要的事情,它应该被记录在邮件列表中。在邮件列表中探讨和记录问题,可以做到有迹可循,有助于新加入的用户了解项目。只要做到这一点,其他都不是问题。

Q2: 作为一个学生,如何参与一个开源小项目,有没有什么建议? Justin Mclean: 首先要找到一个你感兴趣的项目,项目里一般会有相关的问题列表,你可以从一些容易达成的目标,特别是一些文本修复任务入手。

Q3: 我想问的是作为一个PMC成员,我想要参加更多的社区,我需要以怎样的方式开始? Craig Russell:其实在Apache里,很多人是对多个项目进行贡献的。做贡献的方式有很多形式,如果你对一个项目有兴趣,你可以去读读他们的文档,然后脑子里就会产生问题,那么问问题也就是你贡献社区的的一种形式。因为你问这个问题,意味着肯定有一些内容不太清楚、不太清晰。 你问出这个问题,就会促进社区去改善。或者你找到一个BUG,哪怕他只是一个拼写的错误,你只需要在写邮件或者在相关的邮件后面跟帖,你就做了贡献。如果后面你看见其他人也在提这个问题,把你所知道的告诉他,也是贡献的方法。贡献不仅仅是写代码。

Q4:怎么样去评估微服务自动化拆分工具的拆分质量? A:拆分质量的衡量指标很多,更多的时候是主观的感受,难以量化。比如:对于注重交付速度的团队,会尽可能的将服务拆分得小;对于注重组织架构的团队,会以降低业务复杂度,使团队配合、交流以及技术演进更加方便,这时候可能就要拆的更小;而对于注重性能的团队,如果服务拆太小,可能会带去资源占用变高、调用链路增长、响应时间增加的情况。

Q5:刚提到ServiceComb提供了一个叫Mesher的项目,请问它是和Istio一样的解决方案么?之前大家对Istio的性能有诟病,不知道ServiceComb-Mesher有做这方面的优化么?想在是否可以用于商用阶段? A:ServiceComb-Mesher与Istio不是一个对等的东西,你可以理解为Mesher是服务网格Sidecar的一种实现,只是在里面做了一些治理能力的扩充。对于Mesher最主要是它是一个微服务多语言支持的解决方案,它不绑定运行环境,K8S、裸机都可以使用。ServiceComb-Mesher是先商用后开源,具备商用要求。

Q6:刚提到的微服务改造工具可以帮助用户将普通应用装换为基于ServiceComb的微服务,并形成一些API文档。我想问的是转换后的工程是直接可运行的么?转换后需要人工介入修改代码吗?工作量有多少?语言的亲和性怎么样?能不能稍微讲解一下? A:可以理解ServiceComb-Toolkit生成的是一个微服务脚手架工程,目前还不支持将业务代码一并迁移,但生成的微服务工程是可以直接运行的。它已经做好的项目的基本配置,pom、java包依赖、框架代码等,用户需要做的就是基于通讯接口迁移具体的业务实现。对于业务代码的迁移,其实是有一些想法的,比如说可以引入AST抽象语法树对业务代码进行分析。当然也欢迎大家一起来提意见,一起参与进来,一起来完成这些想法。

在此感谢姜宁、王启军提供部分内容素材。

  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/dbMDURNo0BCyh8Ivxxcb

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励