精华内容
下载资源
问答
  • 广电网络云平台微服务架构设计.pdf
  • 油田企业集成服务云平台微服务架构探索.pdf
  • 基于DevOps的云平台微服务架构可靠性研究.pdf
  • 基于DevOps的云平台微服务架构可靠性分析.pdf
  • 轨道交通工程BIM GIS云平台微服务架构研究.pdf
  • 安达斯参加融合媒体制播云平台微服务模块边界规范及关键技术研究项目启动会.pdf
  • 本文是《网易容器云平台微服务化实践》系列文章的第一篇。Docker容器技术已经过了最早的喧嚣期,逐渐在各大公司和技术团队中应用。尽管以今天来看,大家从观念上已经逐渐认可 “将镜像定义为应用交付标准,将容器...
  • 因此,如何在微服务系统上快速构建容器并提供相关完整解决方案是急需解决的技术难题。提出了一种基于容器微服务系统。以容器为载体灵活快速构建微服务,为上层应用提供容器云服务。实现了服务容器化持续集成,...
  • 本文是在云平台构建过程中的一些经验总结,主要说明了PaaS层的微服务架构设计和落地。 目标 降低系统的复杂度,减少系统的不确定性。 方法 量化,标准化,自动化。 规范 流程规范 工程创建流程 开发流程 源码管理...

    本文是在云平台构建过程中的一些经验总结,主要说明了PaaS层的微服务架构设计和落地。

    目标

    降低系统的复杂度,减少系统的不确定性。

    方法

    量化,标准化,自动化。

    规范

    流程规范

    • 工程创建流程
    • 开发流程
    • 源码管理流程
    • 测试流程
    • 发布流程

    设计规范

    • 微服务设计
    • 接口设计
    • 监控设计

    代码规范

    • 代码组织
    • 代码开发

    工具规范

    • 自动化开发工具
    • CI/CD工具
    • 单元测试工具
    • 代码质量管理工具
    • 自动化测试工具

    架构实践

    标准化业务层次

    梳理业务体系和服务能力,将PaaS平台分层。

    • 聚合领域服务能力的应用服务层
    • 提供基本数据访问能力的领域服务层

    1428428-20180716234212184-1828669833.png

    标准化治理方式

    统一使用标准化的微服务治理组件,规范微服务工程模板和领域模型。

    a, 治理组件
    • Registry: Eureka(服务发现)和Spring Cloud Config(统一配置);
    • UAA: User Accout and Authentication(统一身份验证);
    • Monitor:ELK(日志监控)。
    b, 工程模板
    • JHipster标准的工程模板
    • JHipster标准的领域模型

    1428428-20180717081401568-61059427.png

    标准化集成单元

    一个标准化集成单元包括应用网关,应用微服务,领域网关,领域微服务,数据库等。

    • 领域微服务(Domain Service)
    • 领域网关(Domain Gateway)
    • 应用微服务(Application Service)
    • 应用网关(Application Gateway)
    • 数据库(DB)

    1428428-20180717081414189-2131692351.png

    自动化标准工作

    • 通过自动化工具,自动生成标准化代码,提高开发效率和代码质量。具体实践可参考这里
    • 通过DevOps工具,代码提交后自动构建部署,实现开发和测试环境的自动化运维。具体实践可参考这里

    转载于:https://www.cnblogs.com/yorkwu/p/9290598.html

    展开全文
  • 好雨微服务架构实践

    千次阅读 2016-03-07 15:36:47
    目前国外使用微服务架构的知名厂商中不乏Amazon、Twitter、Netflix等这样的科技巨头,但是国内在微服务领域实践这块,真正成功的案例屈指可数,好雨云平台强调应用一键部署,整个平台的核心正是基于微服务的架构去...

    微服务从去年以来一直受到众多开发者的热捧,目前国外使用微服务架构的知名厂商中不乏Amazon、Twitter、Netflix等这样的科技巨头,但是国内在微服务领域实践这块,真正成功的案例屈指可数,好雨云平台强调应用一键部署,整个平台的核心正是基于微服务的架构去搭建,可以说,好雨云在微服务领域有着成功的经验和技术。

      那么好雨云究竟是一个怎样的平台呢,据该平台创始人刘凡介绍,好雨云平台是提供一站式,开发、部署、运行和伸缩任何类型应用的云平台,强调应用的一键部署,同时,好雨云平台还提供数据服务、开发工具和企业信息服务,为产品和企业发展提供全方位支持。 目前和好雨云平台类似的国外有Heroku和IBM BlueMix。

      对于有着超过12年互联网产品开发和管理经验刘凡来说,选择PaaS领域创业并非偶然,在澳客网的时候,他发现企业在产品开发的过程中,浪费了大量的时间在申请服务器、安装各种依赖服务、配置开发环境、写构建脚本等上面,当时就思考如果能把每个团队重复做的事情和有难度的技术问题,做成一个可重用的轮子,产品团队只要专注于产品本身,那产品的开发效率将大大提升,试错成本也将更低,于是,他和几位有类似想法的小伙伴离开了澳客网,创办了好雨云。

      本文来自于对好雨云创始人刘凡的专访,他给我们详细介绍了微服务在好雨云的实践。

      微服务架构成功的因素

      微服务的众多优势让其成为当前受到众多厂商和开发者的热捧, 据刘凡介绍,好雨云平台在打造之初并没有为了实施微服务而实施微服务,其实,微服务本质上是好雨云平台的一个非常核心的功能,简而言之,用户只要在他们平台上部署服务,它本身就是个微服务,实际上好雨云整个平台的核心就是基于微服务的架构去搭建的,所以用户不管部署的是程序还是部署传统服务,或者一个其他的第三方应用程序,在这中间都可以按照微服务的方式进行。

      另外,刘凡表示当前对于微服务来说,最大的一个挑战就是当服务特别多的时候,对于大量服务的管理仍然是一个不小的挑战,而好雨云从整个服务的部署、伸缩、高可用、容错、监控以及服务之间一个依赖关系都给出了自己的解决方案。

      值得一提的是,目前国外很多的互联网巨头包括Google、Netflix、Facebook、Twiter等在微服务实施领域都取得了成功,给国内想要进行微服务实施的企业提供了有益的借鉴。在刘凡看来,微服务要实施成功关键在于以下几个方面:

      第一,这些巨头根据自己的业务特性,研发适合自己的微服务框架。

      第二,在经过长期的实践,对业务重新建模,合理的将业务拆解成微服务。

      第三,当微服务的数量增多,为保证服务可用性,需要有可靠的容错机制。

      第四,依赖公有云或自建云服务,满足互联网模式下的快速业务伸缩。

      微服务的本质是管理

      谈及国内的微服务情况,刘凡认为当前国内的微服务实践大多数都还是个概念,实际上很多企业的业务还是一体化架构,在从一体化架构向微服务转变过程中,国内企业首先需要做的事情就是对业务进行拆解,合理的模块化业务;其次,需要优化整个服务管理。针对上述两个问题,他指出,对于希望实施微服务架构的企业来说,首先还是要从梳理自己的业务架构开始,逐步的把一体化架构拆解成微服务化架构;不能为了实施微服务架构而实施微服务架构,需要清晰的认识SOA架构跟微服务架构的差异,真正的有效的去实施微服务架构;最后,要擅于利用工具为实施微服务提供支持,如果可以有效的利用工具,对于提升整个公司微服务的实施效率有很大帮助。

      虽然微服务具备很多的优势,但是由于微服务本身的特性,实施起来的的难度非常大,那么对于国内企业来说真正愿意实施微服务的意愿有多大,刘凡表示,在当前企业架构里面,服务的部署、伸缩、高可用、容错、监控等,本质上,是对现有服务的管理。如果不谈微服务架构,如果只是有微服务架构管理工具支持,照样能极大提升运维和开发效率,这属于低层次的价值;而对于高层次来说,微服务架构能解决CTO的管理问题,合理的微服务抽象和拆分对应合理的组织结构划分, 每个服务就变成一个独立的小产品,运营这个产品就是组织主要目标,产品的价值决定组织的价值,产品用户的多少决定组织价值的高低,这种市场化的管理方法是最简单有效的管理方法。 另外,微服务架构能帮助技术团队快速开发和迭代产品,对创造一个成功产品有很大帮助。

      微服务在好雨云的解决方案

      

    图片描述

     

      好雨云平台的底层是通过Docker实现的,只是用户感受不到Docker。通过这种内部封装,用户不用管理计算资源和网络资源,把复杂技术包装在内部。通过服务整体对外。

      

    图片描述

     

      只要提供代码就能一键部署在各种环境。

      开发语言支持Java、Python、PHP、Ruby、Golang,Node.JS等,代码仓库支持Github,好雨托管仓库。

      

    图片描述

     

      垂直伸缩只需要设置资源的大小,水平伸缩只需要设置节点的个数。

      

    图片描述

     

      通过高可用调度器,所有服务都具备了高可用特性。

      

    图片描述

     

      类似Spring的依赖注入,要调整服务的依赖关系只需要界面点击久能轻松完成。

      

    图片描述

     

      类似保险丝,当服务B变慢,达到断路器的阀值,服务B将自动下线,不至于影响其他服务,当延迟变小,服务逐步恢复。

      

    图片描述

     

      业务指标:平均响应时间,吞吐率 ,在线人数。在实际场景中,使用业务监控可以替代技术监控,而且更加简单容易理解。

      Docker的出现将简化微服务的管理

      对于当前Docker的火热,刘凡表示,Docker的出现第一让部署更加快捷,第二,统一打包方式之后,对于整个微服务的管理更加简化。

      好雨云平台的产品是基于Docker之上,当在好雨云的产品中,用户使用不需要学习docker,也感受不到容器的存在,他们对Docker做了包装,所有的特性都是面向应用的,而不是面向容器的,面向应用的方式,用户在简单友好的体验下就能管理,用户在部署应用的过程中是感受不到Docker的,从另一个角度简化了Docker的使用。

      从之前的敏捷开发到现在的PaaS平台创业,作为技术出身的刘凡认为最大的挑战还是对于B端产品设计的把握,因为过去C端用户的产品打造经验对于当前的B端产品设计来说可能不一定适用,而对于这样一个有着十多年产品打造经验的刘凡来说,并没有刻意回避,相反,在他的带领下,专注应用一键部署的好雨云平台正在PaaS领域开创中国的Heroku。

      好雨云微服务实践

      微服务架构是好雨云基础组件,好雨云的很多功能都跑在它上,好雨微服务架构的第一个用户就是好雨云自身,在这个过程中我们也体会到微服务架构给我们带来的便捷。

      好雨云的微服务包括:

      控制台服务 —— python 实现

      实时消息服务 —— java 实现

      计费服务 —— python实现

      统计服务 —— java实现

      日志服务 —— c 实现

      redis服务 —— dockerfile 构建

      mysql服务 —— dockerfile构建

      我们技术团队每个人擅长的开发语言不同,在微服务中也有体现,喜欢python的开发者用python开发微服务,喜欢java的开发者用java开发,适合用c的微服务用c开发,开源的服务直接用dockerfile构建。新来的开发人员不需要学习就可以开始开发。

      好雨云微服务的开发过程全部在云平台上进行,本地没有设置开发和测试环境,我们为每一个微服务建立两个应用,一套是开发测试应用,另一套是生产应用,开发测试应用关联开发代码分支,依赖测试数据服务,生产应用关联代码主干,依赖生产数据服务,开发人员日常开发调试在开发测试应用进行,代码提交开发分支,点击部署,马上就能看见应用的效果,测试通过的应用,将代码合并到主干,点击生产应用的部署,完成上线过程,如果代码有重大bug,点击日志中的“代码回滚”就能迅速回滚到上一个代码版本。除此之外服务高可用、服务伸缩、服务容错这些需求都交给好雨微服务架构组件去解决,通过这样的方法我们一天最多上线50多个版本,而过程中用户的服务没有异常中断。

      控制台服务是用户使用量比较大的服务,为了优化性能,我们重度依赖应用实时性能分析,它可以分析出对性能影响最大的SQL和URL,优化完SQL和对应的程序,上线后立马就能看见效果。并根据效果继续优化。对服务的伸缩,我们依赖于实时业务监控,通过监测总体响应时间和吞吐率决定服务是扩容还是缩容。

      通过好雨微服务架构来开发好雨云的特性, 我们践行了“吃自己的狗粮”,并持续优化着好雨微服务架构,做为第一个微服务架构的用户我们也从中受益,我们在环境问题、系统管理、性能优化、服务伸缩和代码发布上线上几乎没有浪费时间,让我们更加专注产品本身,快速迭代。

    展开全文
  • — Service MeshIstioEnvoyKubernetes + Service Mesh = 完整的微服务框架微服务架构的内涵容器之于微服务架构Kubernetes 之于微服务架构DevOps 之于微服务架构原生的微服务架构 — 原生应用架构 微服务框架的...

    目录

    微服务框架的演进

    微服务架构首先要面对分布式架构的内生复杂性,即:服务通信和服务治理的复杂性,例如:服务发现、熔断、限流、全链路追踪等挑战。

    一个完整的微服务系统底座的基本功能应该包含:

    • API 网关:微服务 API 托管、认证和鉴权、负载均衡等。
    • 资源管理:计算、存储、网络资源的管理。
    • 编排(解决服务部署问题):调度、部署和升级。
    • 熔断、服务降级、限流(解决服务容错问题)
    • 消息总线(解决服务间调用问题):轻量级的 MQ 或 HTTP。
    • 服务中心(解决服务发现问题):服务注册、发现、订阅。
    • 监控和告警:监控每个服务的状态,必要时产生告警。
    • 日志和审计:日志的汇总,分类和查询。
    • 调用链跟踪:问题跟踪调试框架。

    在这里插入图片描述

    第一代微服务框架

    第一代微服务框架,如 Dubbo 或 Spring Cloud 以代码库的方式来封装这些能力。这些代码库被构建在应用程序本身中,随着应用一起发布和维护。显而易见的,两者都是只适用于特定的应用场景和开发环境,它们的设计目的并不是为了支持通用性和多语言性。并且它们只是 Dev 层的框架,缺少 DevOps 的整体解决方案(这正是微服务架构需要关注的)。

    在这里插入图片描述

    Spring Cloud

    Spring Cloud 为开发者提供了快速构建分布式系统的通用模型的工具,包括:配置管理、服务发现、熔断器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态等。

    主要项目有:

    • Spring Cloud Config:由 Git 存储库支持的集中式外部配置管理。配置资源直接映射到 Spring Environment。
    • Spring Cloud Netflix:与各种 Netflix OSS 组件(Eureka,Hystrix,Zuul,Archaius 等)集成。
    • Spring Cloud Bus:用于将服务和服务实例与分布式消息传递联系起来的事件总线。用于在集群中传播状态更改,例如:配置更改事件。
    • Spring Cloud for Cloudfoundry:将您的应用程序与 Pivotal Cloudfoundry 集成。提供服务发现实现,还可以轻松实现通过 SSO 和 OAuth2 保护资源,还可以创建 Cloudfoundry 服务代理。
    • Spring Cloud - Cloud Foundry Service Broker:提供构建管理一个 Cloud Foundry 中服务的服务代理的起点。
    • Spring Cloud Cluster:领导选举和通用状态模型(基于 ZooKeeper,Redis,Hazelcast,Consul 的抽象和实现)。
    • Spring Cloud Consul:结合 Hashicorp Consul 的服务发现和配置管理。
    • Spring Cloud Security:在 Zuul 代理中为负载平衡的 OAuth2 休眠客户端和认证头中继提供支持。
    • Spring Cloud Sleuth:适用于 Spring Cloud 应用程序的分布式跟踪,与 Zipkin,HTrace 和基于日志(例如 ELK)跟踪兼容。
    • Spring Cloud Data Flow:针对现代运行时的可组合微服务应用程序的云本地编排服务。易于使用的 DSL,拖放式 GUI 和 REST-API 一起简化了基于微服务的数据管道的整体编排。
    • Spring Cloud Stream:轻量级事件驱动的微服务框架,可快速构建可连接到外部系统的应用程序。使用 Apache Kafka 或 RabbitMQ 在 Spring Boot 应用程序之间发送和接收消息的简单声明式模型。
    • Spring Cloud Stream Application Starters:Spring Cloud 任务应用程序启动器是 Spring Boot 应用程序,可能是任何进程,包括不会永远运行的 Spring Batch 作业,并且它们在有限时间的数据处理之后结束/停止。
    • Spring Cloud ZooKeeper:ZooKeeper 的服务发现和配置管理。
    • Spring Cloud for Amazon Web Services:轻松集成托管的 Amazon Web Services 服务。它通过使用 Spring 的 idioms 和 APIs 便捷集成 AWS 服务,例如:缓存或消息 API。开发人员可以围绕托管服务,不必关心基础架构来构建应用。
    • Spring Cloud Connectors:使 PaaS 应用程序在各种平台上轻松连接到后端服务,如:数据库和消息代理。
    • Spring Cloud Starters:作为基于 Spring Boot 的启动项目,降低依赖管理(在 Angel.SR2 后,不在作为独立项目)。
    • Spring Cloud CLI:插件支持基于 Groovy 言快速创建 Spring Cloud 的组件应用。

    Dubbo

    Dubbo 是一个阿里巴巴开源出来的一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案。

    其核心部分包含:

    • 远程通讯: 提供对多种基于长连接的 NIO 框架抽象封装,包括多种线程模型,序列化,以及 “请求-响应” 模式的信息交换方式。
    • 集群容错:提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
    • 自动发现:基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

    在这里插入图片描述

    下一代微服务框架 — Service Mesh

    Service Mesh 作为服务间通信的基础设施层,可以简单理解为:Service Mesh 是微服务之间的 TCP 和 IP 协议,负责服务之间的网络调用、限流、熔断和监控。

    对于应用程序开发而言,开发者通常不需要关心 L3、L4 层的网络通信协议。同样的,使用 Service Mesh 之后,微服务之间就无须关心服务之间的通信那些,原来使用 Spring Cloud 或 Dubbo 框架来实现的通信代码逻辑了。

    在这里插入图片描述

    在 CaaS 中,Service Mesh 作为 Sidecar 运行,对微服务来说是透明,但所有微服务之间的流量都会通过它,所以对微服务的流量控制都可以在 Service Mesh 中实现。可见 Service Mesh 是云原生理念中 “容器设计模式” 的典范。目前流行的 Service Mesh 开源软件有 Linkerd、Envoy 和 Istio。

    Linkerd 和 Envoy 比较相似,都是一种面向服务通信的网络代理,均可实现诸如服务发现、请求路由、负载均衡等功能。它们的设计目标就是为了解决服务之间的通信问题,使得应用对服务通信无感知,这也是 Service Mesh 的核心理念。

    Linkerd 和 Envoy 像是分布式的 Sidebar,多个类似 Linkerd 和 Envoy 的 Proxy 互相连接,就组成了 Service Mesh。而 Istio 则是站在了一个更高的角度,它将 Service Mesh 分为了 Data Plane 和 Control Plane。Data Plane 负责微服务间的所有网络通信,而 Control Plane 负责管理 Data Plane Proxy。

    在这里插入图片描述

    Istio

    Istio 提供了一个完整的解决方案,通过为整个 Service Mesh 提供行为洞察和操作控制来满足微服务应用程序的多样化需求,且不需要改动任何微服务的业务代码。

    Istio 提供了许多 Service Mesh 的关键功能:

    • 流量管理:控制服务之间的流量和 API 调用的流向,使得调用更可靠,并使网络在恶劣情况下更加健壮。
    • 可观察性:了解服务之间的依赖关系,以及它们之间流量的本质和流向,从而提供快速识别问题的能力。
    • 策略执行:将组织策略应用于服务之间的互动,确保访问策略得以执行,资源在消费者之间良好分配。策略的更改是通过配置网格而不是修改应用程序代码。
    • 服务身份和安全:为网格中的服务提供可验证身份,并提供保护服务流量的能力,使其可以在不同可信度的网络上流转。

    Istio 提供了一种简单的方式来构建 Service Mesh,只需要在 Pod 中部署一个特殊的 Sidecar Container,然后使用 Istio 的控制面来配置和管理代理,拦截微服务之间的所有网络通信。

    Istio 的软件架构从逻辑上分为数据面和控制面:

    • 数据面:由一组智能代理(Envoy)组成,代理逻辑部署为 Sidecar,调解和控制微服务之间所有的网络通信。
    • 控制面:负责管理和配置代理来路由流量,以及在运行时执行策略。

    在这里插入图片描述

    Envoy

    Envoy 是一个面向微服务架构的 L7 代理以及通信总线,为了实现:对于应用程序而言,网络应该是透明的,当发生网络和应用程序故障时,能够很容易定位出问题的根源。

    Envoy 可提供以下特性:

    • 外置进程架构:跨编程语言。
    • 可快速升级
    • 使用 C++11 编码:能够提供高效的性能。
    • L3/L4 过滤器:核心是一个 L3/L4 网络代理,能够作为一个可编程过滤器实现不同 TCP 代理任务,插入到主服务当中。通过编写过滤器来支持各种任务,如:原始 TCP 代理、HTTP 代理、TLS 客户端证书身份验证等。
    • HTTP L7 过滤器:支持一个额外的 HTTP L7 过滤层。HTTP 过滤器作为一个插件,插入到 HTTP 链接管理子系统中,从而执行不同的任务,如:缓冲,速率限制,路由/转发,嗅探 Amazon 的 DynamoDB 等等。
    • 支持HTTP/2:在 HTTP 模式下,支持 HTTP/1.1、HTTP/2,并且支持 HTTP/1.1、HTTP/2 双向代理。这意味着 HTTP/1.1 和 HTTP/2 在客户机和目标服务器的任何组合都可以桥接。
    • HTTP L7 路由:在 HTTP 模式下运行时,支持根据 content type、runtime values 等,基于 Path 的路由和重定向。
    • 支持 gRPC:gRPC 是 RPC 框架,使用 HTTP/2 作为底层的多路传输。HTTP/2 承载的 gRPC 请求和应答,都可以使用 Envoy 的路由和 LB 能力。
    • 支持 MongoDB L7:支持获取统计和连接记录等信息。
    • 支持 DynamoDB L7:支持获取统计和连接等信息。
    • 服务发现:支持多种服务发现方法,包括异步 DNS 解析和通过 REST 请求服务发现服务。
    • 健康检查:含有一个健康检查子系统,可以对上游服务集群进行主动的健康检查。也支持被动健康检查。
    • 高级 LB:包括自动重试、断路器,全局限速,阻隔请求,异常检测。未来还计划支持请求速率控制。
    • 前端代理:可作为前端代理,包括 TLS、HTTP/1.1、HTTP/2,以及 HTTP L7 路由。
    • 极好的可观察性:对所有子系统,提供了可靠的统计能力。目前支持 statsd 以及兼容的统计库。还可以通过管理端口查看统计信息,还支持 第三方的分布式跟踪机制。
    • 动态配置:提供分层的动态配置 API,用户可以使用这些 API 构建复杂的集中管理部署。

    Kubernetes + Service Mesh = 完整的微服务框架

    Kubernetes 是容器调度编排的事实标准,并且 Istio 天生的支持 Kubernetes,这就弥合了应用编排框架与 Service Mesh 之间的空隙。Istio 等 Service Mesh 组件的出现补足了 Kubernetes 在微服务间服务通讯上的短板。

    虽然 Dubbo、Spring Cloud 等都是成熟的微服务框架,但是它们或多或少都会和具体语言或应用场景绑定,并只解决了微服务 Dev(开发)层面的问题。若想解决 Ops(运维)问题,它们还需和诸如 Cloud Foundry、Mesos、Docker Swarm 或 Kubernetes 这类资源调度框架做结合。但是这种结合又由于初始设计和生态,有很多适用性问题需要解决。

    Kubernetes 则不同,它本身就是一个 “不可变基础设施”,与开发语言无关的、通用的容器管理平台,它可以支持运行云原生和传统的容器化应用。并且它覆盖了微服务的 Dev 和 Ops 阶段,结合Service Mesh,它可以为用户提供完整端到端的微服务体验。

    在未来,一个趋近于 PaaS 形态的微服务框架技术栈应该是如下形式:

    • IaaS:提供了资源能力(计算、存储、网络)。
    • CaaS:提供容器编排能力。
    • Service Mesh:提供微服务间东西向通信的能力。
    • APIGW:对外暴露微服务的南北向业务入口。

    在这里插入图片描述

    微服务架构的内涵

    容器之于微服务架构

    不同微服务之间可能存在一些异构,为了让每一个团队在微服务体系下发挥最大效能,需要允许不同团队采用不同的编程语言,甚至不同的运行环境来去运行这些微服务。因此,在运维和管理微服务时,最初其实并没有一套统一的标准去处理的异构环境,这也是为什么后来容器技术变得流行起来,它的一个重要作用就是通过一层标准的封装以及标准的运行时,来标准化微服务部署。这样从生命周期管理的角度来看,每一个微服务之间的差异就会变少,共同点变多。所以容器也被称为 “不可变基础设施”。

    在这里插入图片描述

    Kubernetes 之于微服务架构

    Kubernetes 的作用是帮助把已经标准化的微服务最便捷地运行到底层资源上面。我们讲到的存储、计算、网络都通过 Kubernetes 这层进行了统一抽象和封装,让已经被容器统一的微服务能够直接运行到 Kubernetes 平台。因此,运维人员不用再苦恼如何去把某个微服务分配到具体的某一个资源或计算单元上去。通过容器和容器平台,大大简化了微服务本身的生命周期管理,简化了微服务自身的运维管理问题,也促进了微服务更多地被企业所采用。

    Kubernetes 具有一个 Pod 的概念。一个 Pod 实际上是一组容器的集合,在一个 Pod 中可以运行一个或多个容器。一般来讲,当我们采用微服务架构时,会把微服务的主体运行在主容器中,主容器的生命周期跟 Pod 自身的生命周期是一个耦合的状态。除了主容器之外,在同一个 Pod 中还会运行一些边车容器(Sidecar 容器),为主容器提供一些辅助功能,比如:日志采集、网络代理、身份鉴权等,这样微服务除了自身提供的核心业务服务以外,通过 Kubernetes 我们还可以动态添加一些额外的辅助能力,让微服务管理变得更健壮。

    这种微服务应用的设计思想被称为 “容器设计模式”。

    DevOps 之于微服务架构

    当我们将大型的单体应用拆解为多个微服务,也一定会增加 IT 系统研发协同、交付、运维的复杂性。云原生就在于帮助微服务解决生命周期管理以及运维管理难题。

    因为微服务的数量非常多,部署、管理的工作量很大。

    • 开发方面:如何保证各个服务在持续开发的情况下仍然保持协同合作。
    • 测试方面:服务拆分后,几乎所有功能都会涉及多个服务。原本单个程序的测试变为服务间调用的测试。测试变得更加复杂。

    而随着 CI/CD 概念推广以及容器技术普及,微服务将这两种理念和技术结合起来,形成新的:“微服务 + API + 平台” 的开发模式,提出了容器化微服务的持续交付概念。

    传统单体架构 DevOps 开发方式,要求产品队伍横跨产品管理、开发、QA、DBA 以及系统运维管理。
    在这里插入图片描述

    微服务架构 DevTestOps 开发方式,将一个大臃肿的整体产品开发队伍切分为根据不同微服务的划分的产品队伍,以及一个大的整体的平台队伍负责运营管理,两者之间通过 API 交互,做到了松耦合隔绝。

    在这里插入图片描述

    在测试方面,微服务架构下的测试分为三个层次:

    1. 端到端(集成)测试:覆盖整个系统,一般在用户界面进行测试。由于端到端测试实施难度较大,一般只对核心功能做端到端测试。一旦端到端测试失败,则需要将其分解到单元测试,分析失败原因,然后编写单元测试来重现这个问题,这样未来我们便可以更快地捕获同样的错误。
    2. 服务(功能)测试:针对服务接口进行测试。服务测试的难度在于服务会经常依赖一些其他服务。这个问题可以通过 Mock Server 解决:
    3. 单元测试:针对代码单元进行测试。我们一般会编写大量的单元测试(包括回归测试)尽量覆盖所有代码。

    三种测试从上到下实施的容易程度递增,但是测试效果递减。端到端测试最费时费力,但是通过测试后我们对系统最有信心。单元测试最容易实施,效率也最高,但是测试后不能保证整个系统没有问题。

    在这里插入图片描述

    云原生的微服务架构 — 云原生应用架构

    综上,我们可以感受到微服务架构与容器、Kubernetes、DevOps 等云原生关键技术自然地走到了一起,构成了云原生应用架构的雏形。

    在这里插入图片描述

    云原生应用架构具有下述特点:

    • 平台化:利用云作为一个平台,为微服务架构进行更多的赋能。
    • 标准化:微服务本身的部署、运维,微服务之间与其它服务之间的通讯都能做到标准化,让服务与服务之间的互联互通变得更容易,服务能够跨到不同的平台上,做到一次编写、一次定义、多处运行。
    • 轻量化:让研发人员关心核心业务代码、业务逻辑的研发,而不是复杂的微服务治理相关的逻辑研发。
    • 产品化:希望能构建微服务相关的产品,以产品化的方式支持大家使用微服务架构,让它变得更好用、更易用。

    在这里插入图片描述

    展开全文
  • MicroserviceCloudPlatForm_introduction_3.0.pdf IBM微服务云平台从概念到实现
  • Dubbo 3.0 - 开启下一代原生微服务

    千次阅读 2020-08-26 13:37:06
    简介:本文整理自作者于 2020 年原生微服务大会上的分享《Dubbo3.0 - 开启下一代原生微服务》,主要介绍了关于思考 rpc 框架层面,功能演进的方向是什么?以及怎么更好地支持上的多语言开发的新思考。作者 | ...
    简介:本文整理自作者于 2020 年云原生微服务大会上的分享《Dubbo3.0 - 开启下一代云原生微服务》,主要介绍了关于思考 rpc 框架层面,功能演进的方向是什么?以及怎么更好地支持云上的多语言开发的新思考。

    头图.jpeg

    作者 | 郭浩(项升)  阿里巴巴经济体 RPC 框架负责人

    导读:本文整理自作者于 2020 年云原生微服务大会上的分享《Dubbo3.0 - 开启下一代云原生微服务》,主要介绍了关于思考 rpc 框架层面,功能演进的方向是什么?以及怎么更好地支持云上的多语言开发的新思考。

    关注阿里巴巴云原生公众号,后台回复 【818】 即可获取直播回看地址和大会 PPT 合集。

    看到这个题目,大家可能会有几个问题,比如,什么是云原生微服务?Dubbo3.0 是什么?和目前的 Dubbo2.0 有什么区别?用了 Dubbo3.0 会带来哪些业务视角的好处?后面的分享会对这些问题逐一解答。

    这次分享分为以下几个环节:

    • Dubbo 的演进历史
    • Dubbo 的开源现状
    • 定义 Dubbo3.0 
    • 分享 Dubbo 3.0 目前取得的一些成果

    考虑到有些同学对 Dubbo 可能不太熟悉,在介绍背景之前,我先简单介绍一下 Dubbo 是什么。简单地说,Dubbo 是基于 Java 的 RPC 框架。一个 RPC 框架至少由数据格式、传输协议和连接管理组成,这三点也是构成核心。Dubbo 能够被广泛应用主要有两个原因:

    • 一方面是较好的插件机制支撑了多种扩展,这些扩展在不同业务场景和基础架构中能分别发挥最大优势;
    • 另一方面不同于普通的 RPC 框架,Dubbo 的服务治理功能让其在易用性方面脱颖而出,比如路由规则能够支持灵活多样的运行时动态路由,可以基于此功能实现灰度、ABTest、流量回放等功能。

    Dubbo 发展历程

    简单介绍完 Dubbo,现在让我们一起回顾一下 Dubbo 的历史。

    1.PNG

    在 2008 年,Dubbo 作为阿里巴巴内部 SOA 解决方案横空出世。业务的急速发展带来了强烈的服务化需求,只用了两年的时间 dubbo 就在内部大面积落地,日均调用量超过了 30 亿。经过落地过程中不断的打磨,Dubbo 无论是在性能上还是在扩展性方面,都成为了当时遥遥领先的 RPC 框架。为了更好地回馈开发用户和其他有服务化需求的公司,在 2011 年 Dubbo 选择了开源,并发布了 2.0.7 版本作为开源的第一个正式版本。

    开源后 Dubbo 蓬勃发展,社区活跃,获得了开发者的一致好评。2017 年 9 月,阿里巴巴宣布重启 dubbo 的开源维护,重启开源后,解决了积累很久的 pull request 和 Issue ,以及之前一些公司不得不开始自己维护 dubbo 的私有分支也逐步合入了主干。同时,与社区进一步的互动,也会激发 dubbo 团队对产品的灵感。

    目前 Dubbo 团队就是阿里巴巴内部负责服务框架的团队,我们在大流量、大规模集群、服务治理领域有着丰富的实践,这些经验已经在有序地回馈给社区。重启开源后发布的 2.7.x 版本带了了很多新的特性,比如 JDK8 支持,完整的异步支持,以及元数据的精简和抽象。在今年,我们启动了另外一个新的历程碑 —— Dubbo3.0,这也会带领 Dubbo 走向下一个阶段,即云原生微服务。

    Dubbo 开源现状

    简单介绍完 Dubbo 的历史,下一步我们来走进 Dubbo 的开源现状。

    2.PNG

    Dubbo 目前有 57 位 committer 和 379 位 contributor 。根据 X-lab 开放实验室最新发布的《2020 年微服务领域开源数字化报告》,Dubbo 的开源活跃度全球排名 693,在微服务框架中排名第五。整个社区蓬勃发展,来自外部的代码贡献量已经超过来自阿里员工的贡献量。也正是由于有这么活跃的社区,Dubbo 目前支持 6 种语言和 30 多个生态项目。

    3.png
    数据来源《2020 年微服务领域开源数字化报告》,阿里巴巴云原生公众号后台回复关键词“微服务报告”获取报告全文。

    作为国内 RPC 框架的领跑者, Dubbo 也在被 Spring Cloud Sleuth、Zipkin、Envoy、Mosn 等标杆项目官方集成。Dubbo-go 子社区是社区演进的另一个探索和优秀实践。Dubbo-go 子社区由官方引导,完全社区化运作和开发,前不久发布的 Dubbo-go 1.5 版本在功能上已经完全对齐 Dubbo-java 2.7 版本,后续的 Dubbo3.0 也会包含 Dubbo-go 3.0 ,让我们拭目以待。

    4.PNG

    从数据上看, Dubbo 目前有 33k stars 和 21k forks,分别位于 github java 项目前十和前三,用户的认可带来了社区的活跃,而活跃的社区则会以高频率的版本更新带来更多新的、有用的特性来彰显其旺盛的活力。目前已经登记的 Dubbo 企业用户超过了 200 个,其中有 30 多个企业成为了 Dubbo 的生态合作伙伴。

    有了这些公司的帮助, Dubbo 在设计、开发、测试、灰度上线的整个流程都有了更强有力的保障。让使用了 Dubbo 的应用跑的更快更稳定一直是 Dubbo 社区不变的追求。

    5.PNG

    从功能上看,Dubbo 3.0 完成后的功能将涵盖从开发人员直接接触的 API 层到底层传输的完整链路。

    API 层将包括基于 IDL 的完整数据交换格式打通,这会带来两方面的好处:

    • 一是统一的 IDL 模型可以生成统一的 client stub 和 server stub,这些 stub 能直接进行非反射调用,会在性能上有很大的提升;
    • 第二点是对异步和 streaming 的原生支持能够给用户更多的选项,根据不同的业务场景选择更方便的用法。

    第二层是对于注册中心、元数据中心和配置中心的扩展。注册中心和配置中心基本支持了所有业界主流的实现,元数据中心是 Dubbo 2.7 新抽象出的组件,负责元数据的存取。这里的元数据包括服务的调用配置,如超时时间,序列化方式,协议等,以及对服务方法签名的抽象,方便 Dubbo 实现跨框架和跨语言调用。

    集群层是 Dubbo 的一个主要亮点,除了支持各种重试策略外,Dubbo 也提供了各种场景下的负载均衡器,比如随机和权重。值得一提的是,Dubbo3.0 将带来 pull-based 的自适应负载均衡,这将显著提升分布式集群的性能和效率。

    再下一层是协议层,协议层是 RPC 框架的内核部分,一般分为应用层协议和传输层协议。应用层协议 Dubbo3.0 支持 GRPC / Redis / REST 等主流协议以及 Dubbo 原生的 Dubbo2.0 协议。传输层支持 HTTP / HTTP2 和一些自定义的协议如 RSOCKET。序列化方面,Dubbo 除了支持 hessian 、Java 外,还支持 protobuf,这对于性能和跨语言都有着巨大的意义。

    6.PNG

    看完了 Dubbo 3.0-java 的功能图,我们再来看一下 Dubbo-go 的功能图。可以看到,从分层到实现, Dubbo-go 已经基本和 JAVA 对齐,后面的 3.0 版本也会和 JAVA 齐头并进,共同迈向云原生。

    Dubbo3.0-下一代云原生微服务

    介绍完了 Dubbo 的现状,下面我们进入今天的主题:Dubbo3.0 -下一代云原生微服务。

    7.PNG

    一个新架构或新技术的出现一定会伴随特定的发展趋势

    目前我们可以看到的几个趋势是 K8s 成为资源调度的事实标准、Mesh 化成为主流以及规模上的急速增长。这些趋势的存在对 Dubbo 提出了更高的要求:

    • 首先,用户如何在 K8s 上更方便的部署和调用 Dubbo 服务是必须要解决的问题,要解决这个问题,统一的协议和数据交换格式是必须前提;
    • 其次,Mesh 化的流行带来了多元化问题,即原生 Dubbo 和 Mesh 化 Dubbo 如何共存,多语言的场景如何支持;
    • 第三点,规模的增长会给整个 Dubbo 架构带来更大的挑战,无论是注册中心等组件,还是客户端,都会有更多的数据和调用量。如何在保持稳定的前提下,提供更高效的服务是 Dubbo 演进的重中之重。

    这些云原生时代带来的挑战,促成了 Dubbo 的下一代定义。新协议、K8s 基础架构支持、多语言支持和规模化支持四个子项目共同组成了 Dubbo3.0 。下面我们将走进 Dubbo3.0,看看具体有哪些新特性。

    1. 下一代 RPC 协议

    首先我们从协议开始。

    8.PNG

    大家可以看到,这是 Dubbo2.0 的协议。从功能上看, Dubbo2.0 提供了 RPC 的核心语义,包括协议头、标志位、请求 ID 以及请求/响应数据。在云原生时代,2.0 协议主要面临两个挑战:

    • 一是生态不互通,用户很难直接理解二进制的协议;
    • 第二是对 Mesh 等网关型组件不够友好,需要完整的解析协议才能获取到所需要的调用元数据,如一些 RPC 上下文,从性能到易用性方面都会面临挑战。

    那么,在支持已有的功能和解决存在的问题的前提下,下一代的协议需要有哪些特性呢?

    9.PNG

    • 首先,协议需要解决跨语言互通的问题,传统的多语言多 SDK 模式和 Mesh 化跨语言模式都需要一种更通用易扩展的数据传输格式;
    • 其次,协议应该提供更完善的请求模型,除了 Request/Response 模型,还应该支持 Streaming 和 Bidirectional;
    • 第三点,在性能上,新的协议应该保留 request Id 机制,以避免 HOL 带来的性能损耗;
    • 最后,新协议应该易扩展,包括但不限于 Tracing/ Monitoring 等支持,也应该能被各层设备识别,降低用户理解难度。

    基于这些需求,HTTP2/protobuf 的组合是最符合的。提到这两个,大家可能很容易想到 GRPC 协议。那新一代的协议和 GRPC 的关系是什么呢?

    • 首先,Dubbo 新协议是基于 GRPC 扩展的协议,这也保证了在生态系统上新协议和 GRPC 是能够互通和共享的;
    • 其次,在这个基础上,Dubbo 新协议将更原生地支持 Dubbo 的服务治理,提供更大的灵活性;
    • 在序列化方面,由于目前大多数应用方还没有使用 Protobuf ,所以新协议会在序列化方面给予足够的支持,平滑的适配现有序列化,方便迁移到 Protobuf;
    • 在请求模型上,新协议将原生支持 Reactive,这也是 GRPC 协议所不具备的。

    2. 应用级注册发现

    Dubbo3.0 第二个内容是应用级注册发现。

    10.PNG

    熟悉 Dubbo 的同学都知道,Dubbo 目前的注册发现都是接口级别的。也就是同一个应用发布的多个服务会在注册中心注册多份数据,这些数据彼此独立,方便进行服务化改造和接口迁移。为什么要提出应用级注册发现呢?

    主要有两个原因:

    • 一是现有生态系统的互通,包括 Spring cloud 和 K8s 都是基于实例,也就是应用级别进行的注册发现,Dubbo 要成为连接异构系统最好用的 RPC 框架就需要支持实例粒度;
    • 第二个原因是从规模上看,更大规模的增长会带来元数据的极速膨胀,这会给注册中心和客户端带来更大的内存占用。按照现有数据分析,如果升级到应用级注册发现,以平均发布 50 个服务的应用为例,将减少 60% 的内存占用和注册中心数据。以发布超过 10k 接口的平台型应用为例,这些数据可降低 90%。

    可以看到,应用级注册发现带来的优化是十分显著的。由于应用级注册发现目前已经基本开发完毕,下面我们可以简单介绍下它的原理。

    11.PNG

    首先要解决的一个问题是如何保证平滑迁移,用户基于接口的配置怎么映射到应用上去。

    这里我们抽象出了元数据中心来管理接口到应用的映射以及应用级的元数据。在部署态,Dubbo 框架会自动上报这个关系到元数据中心。而运行态用户侧的配置和服务治理则通过这份映射关系重新将应用粒度映射到接口粒度。涉及到最核心的部分——选址也是分为两部分,应用级选址和接口级选址同时存在,方便进行服务治理。

    3. K8s 云原生支持

    Dubbo3.0 第三个内容是 K8s 云原生支持。

    12.PNG

    这里主要包括两部分内容:

    • 一是需要对齐 K8s 的生命周期,能够让 Dubbo 服务原生的在 K8s 体系内注册和发现;
    • 第二则是对 Mesh 的支持。上面在协议那里我们已经讲到,新协议通过使用 HTTP2 进行 header / payload 分离解决了网关需要解析完整协议的问题。另外一个问题则是服务注册发现和治理,注册发现需要 Dubbo 能够在 Mesh 的 xDS 体系内作为数据面打通。治理则需要将原有的规则逐步迁移至基于  YAML 的剔除 IP 依赖的规则。最终的形态将是原生的 Dubbo 服务能够和基于 thin SDK 的 Dubbo + Mesh 完美互通和进行服务治理。

    4. 柔性增强

    Dubbo3.0 最后一部分是柔性增强。

    13.PNG

    柔性增强要解决的问题有两个:

    • 一是在节点异常的情况下,分布式服务能够保持稳定,不出现雪崩等问题;
    • 二是对于大规模的应用,能够以最佳态运行,提供较高的吞吐量和性能。

    从方法上看,Dubbo3.0 的柔性增强会以面向失败设计为理念,提供包括精准容量评估、自适应限流、自适应负载均衡的支持,自底向上的分步构建大规模可靠应用。从单一服务的视角看,服务是压不垮的,稳定的。

    从分布式视角看,复杂的拓扑不会带来性能的下降,分布式负载均衡能够以最优的方式动态分配流量,保证异构系统能够根据运行时的准确服务容量合理分配请求,从而达到性能最优。

    Dubbo3.0 路线图

    介绍完了 Dubbo3.0 的主要内容,下面我们来看一下 roadmap。

    14.png

    在接下来的 9 月份,应用级注册发现会同时在阿里巴巴内部和外部公司同时大规模落地。今年双十一前会交付云原生服务治理规则。到明年的 3 月份,开源侧的新协议支持功能基本完备。明年的 6 月份,云原生 K8s 的支持和 Mesh 支持功能完备,开始试点。柔性增强将在 2022 年的 3 月份全面落地,请拭目以待。

    看了 roadmap ,大家可以发现,Dubbo3.0 已经是运行态。

    15.PNG

    首先,基于 Dubbo3.0 核心的 HSF3.0 在阿里巴巴内部大规模落地,内外统一的路线不仅仅是对 Dubbo 质量的肯定,也是对社区用户的保障和回馈。

    后续我们会将内部的大规模高并发经验继续输出到 Dubbo 开源侧,也会以最高的质量来保证 Dubbo 的可靠演进。Dubbo 3.0 的应用级注册发现功能也在内部和开源侧同时灰度试点。在协议侧,新协议已经在阿里巴巴和蚂蚁的互通中得到广泛应用,内部实践的经验将更好的服务开源侧协议演进。

    最后,欢迎大家参与 dubbo 的社区,分享你们在实践中的经验,反馈碰到的问题,携手让 Dubbo 发展得更好。

    关注阿里巴巴云原生公众号,后台回复 【818】 即可获取直播回看地址和大会 PPT 合集。

    阿里巴巴云原生关注微服务、Serverless、容器、Service Mesh 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的公众号。”

    原文链接:https://developer.aliyun.com/article/770964?

    版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
    展开全文
  • 为此从 2016 年开始,我们容器服务团队内部率先开始进行 dogfooding 实践,看看容器云平台能不能支撑得起容器服务本身的微服务架构,这是一次很有趣的尝试。 一旦决定做微服务架构,有很多现实问题摆在面前,比如...
  • 正好这段时间我们在封闭研发我们的新一代数字化云平台(theplatform),借此机会和大家分享一下我们的总体设计及思路:theplatform是一款基于微服务架构的DevOps容器云平台,设计主体分成了三个步骤: 1.看问题:...
  • 普元技术选型方法论:技术/功能、项目运作模式、技术提供者的背景、生态环境
  • 内容来源:2017年11月9日,华为架构师李林锋在“华为ServiceComb在线”进行《消费者ServiceComb微服务实践》演讲分享。IT 大咖说(id:itdakashuo)作为独家视频合作方,经主办方和讲者审阅授权发布。阅读字数:...
  • 什么是微服务,用MartinFowler的一段话:没有一个明确的定义,但简单来说是,以一组小型服务来构建成应用,每个服务运行在单一独立的进程,不同服务间采用轻量级的交互机制来通信,例如HTTP(REST API)。这些组成应用...
  • 当前腾讯的TSF的微服务能力主要包括2部分: 服务框架层包括嵌入式SDK以及ServiceMesh。 服务生命周期管理层包括自研的PaaS以及治理运维平台(不在本次分享范围之内) 嵌入式SDK主要是基于Spring Cloud来实现。...
  • 云平台技术选型之九:微服务,对市面上的微服务开源软件进行了调研,并确定了选型

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 46,166
精华内容 18,466
关键字:

云平台微服务