微服务技术栈选型,精彩

2024-09-04 11:18
文章标签 服务 技术 选型 精彩

本文主要是介绍微服务技术栈选型,精彩,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

微服务技术栈选型,看了这个别的可以不用看了

jurassic_1  2016-11-01 16:37:57  浏览3461  评论0

分布式 架构 Cloud spring 基础设施 微服务 负载均衡 netty

摘要: 本文由PPmoney架构师敖小剑分享:微服务的核心技术,目前可选的开源微服务框架,以及为微服务提供支撑的基础设施。

前言

大家好,我是敖小剑,今天给大家分享的主题是"利用开源社区打造微服务生态体系"。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

主要内容如下:

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

内容分为三个大的部分:


1. 微服务的核心技术

2. 目前可选的开源微服务框架

3. 为微服务提供支撑的基础设施


需要说明的是,由于时间有限,而分享的内容数量太多,因此:


1. 内容都只是罗列,不展开具体介绍

2. 个人知识面有限,列举过程中范围覆盖不足有所遗漏是必然的

3. 部分场景我会给出一些个人建议,但是请注意这些都是我的一家之言,仅供参考

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

下面列出的是今天将会介绍的内容,数量非常多,可谓繁星璀璨。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1


第一部分:核心技术


现在开始第一个部分:核心技术。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

内容主要是第一排的四个技术:


- 进程间通讯

- 服务注册与发现

- 负载均衡

- 熔断


第二排的三个内容基本都会在类库或者框架中包含,通常不会单独放出来,因此我们不详细展开。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

在展开讲述进程间通讯之前,额外指出一个对微服务而言及其重要的概念:


在微服务架构中,为了彻底隔绝不同服务,采用了最坚决的方案,强制要求服务之间:通过 **远程访问** 方式进行通讯


在这点上,微服务和以OSGi、jigsaw为代表的Java模块化方案形成鲜明对比。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

进程间通讯的方式比较多,其多样性体现在两个方面:


- 有三种风格的解决方案:REST,RPC 和 定制

- 交互方式有两个维度:按照交互对象的数量分为一对一和一对多,按照应答返回的方式分为同步和异步。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

两个维度组合之后的可能性如图:

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

目前业界常见的网络类库:

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

考虑到 netty 通常会是大多数人的选择,这里再展开谈一下 netty 的版本选择问题.


需要特别强调的是: netty 5.* 版本因为 ForkJoinPool 引入了太多复杂度而又未能带来明确的性能提升,已经被 netty 官方放弃,不再继续。使用 netty 5.* alpha 版本的同学请回退到 4.0 或者 4.1 版本。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

Rest 研究不多,只能给出一点简单的建议。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

RPC框架,业界数得上数的大概有十几种,这里只详细介绍三种,分别代表老中新三代RPC框架。

640?wxfrom=5&wx_lazy=1

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

以下是个人给出的建议:

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

提醒一点的是:如果需要支持移动设备,如果想要用HTTTP 2 的新特性,那么就只能选择gRPC了。


谈谈第三条路线:定制。选择这种方案的同学也不少。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

消息队列的选择,同样很多,这里列出三种常见的加一个特例 NSQ。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

首先看服务注册和服务发现,在实现时根据对一致性要求的不同,分成两个流派:


1. 强一致性

比较常见的分布式一致性协议是 PAXOS 协议和 Raft 协议。相比 PAXOS 而言,Raft 协议易于理解和实现,因此最新的分布式一致性方案大都选择 Raft 协议。

zookeeper 采用的是 PAXOS 协议(实际为改进版本ZAP),而 Raft 协议那边主要是 consul 和 etcd。

2. 弱一致性

如果对一致性要求不高,可以选择以 DNS 为基础的方案,也可以像新浪微博的 Vintage 一样基于 Redis 。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

常见的强一致性方案如下:

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

弱一致性方案比较少,一般多用于 REST 或者 HTTP + json / web service 等简单场合:

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

负载均衡的方案选择,注意区分服务器端负载均衡和客户端负载均衡。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

熔断器目前只有一个可选的开源方案,之前有同学吐糟说 Hystrix 的设计和实现不好,但是在2016年又改进了很多。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

第二部分:微服务框架

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

在国内讨论SOA、服务化、微服务时,dubbo 总是一个绕不开的名字。个人对 dubbo 的评价是"国内SOA框架集大成之作",基本上一个SOA框架应有的功能都有了。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

回顾一下 dubbo 曾经辉煌的历史:

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

再对比一下现状,实在令人感叹:

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

从时间线上来看 dubbo 的崛起和兴盛,犹如流星划过夜空.

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

对 dubbo 的总结,有比较多的个人情绪在,仅供参考。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

Motan,能否接过 dubbo 的大旗?

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

发现每个服务化框架出来,都要被问一个问题:为啥你们不直接用 dubbo 呢? Motan也未能免俗 :)

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

补充:这也是我自己不选择 dubbo,而是新设计 dolphin 微服务框架的重要理由之一。改造成本远不是一句轻巧的"稍微改改"那么简单。

Motan的技术栈:

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

下面介绍业界大佬 Netflix 出品的重量级开源产品 OSS 套件。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

Netflix 比较有意思的一个做法是他的组建拆分的比较细致,每个独立功能都拆分为单独的组件,方便按需选择,赞一个。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

个人对 OSS 的一些看法,属于鸡蛋里面挑骨头性质,仅供参考。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

下面开始介绍另外一位业界超重量级大佬的一系列作品,所有Java同学都最熟悉不过的 spring。

在介绍spring为微服务提供的支持之前,我们先回顾一下过去这十四年spring一路的历程:

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

开始大叔式的怀旧环节,想当年我们看这几本书的时候,我们还那么年轻 :)


唠叨几句:Rod Johnson 大叔(现在可能要称为大爷了) 是我最敬仰最崇拜的业界大神之一。做技术能做到他这水准,此生无憾。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

在spring从2002年出道开始,这十几年间出了很多里程碑式版本,增加了很多重量级的功能。但是,个人评价,2014年spring boot的问世,才是最近三五年间spring最大的变革和重新思考。


springboot的出现,代表着spring已经不再沉迷于贪吃蛇游戏,而是开始反省自身和自我改造,对于一个发展了十多年的老框架来说,认识到这点,远比加一两个新功能重要的多。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

对 spring boot 总结,这也是我选择 spring boot 作为新的 dolphin 微服务框架基石的重要理由。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

spring cloud 出场,2015年才出来的新面孔。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

承载着spring对微服务架构领域的众望和抱负。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

一出场,就是大量的子项目,这里只列出平时比较常用的一些:

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

Spring Cloud Netflix 子项目的出现,更像是spring之前的做事风格,做他最擅长的领域:集成。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

以下内容是后面补充,没有在会场直接说,纯属个人吐糟:

对spring cloud的个人评价:想法很好,出发点正确,市场空缺而切入的时机很合适。但是,spring cloud的实际表现,总给人一种束手束脚,瞻前顾后,小富即安的感觉。对比十几年前 Rod Johnson 大叔意气风发,气壮山河,谈笑间掀翻EJB的王座的表现,如今的spring cloud,能力不足,信心不够,格局太小,难成大器。期待后面能有转变。

下面是对目前微服务框架的个人看法:

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

第三部分:基础设施

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

由于演讲时间只有一个小时,因此基础设施的很多内容无法罗列,这次只是介绍了其中小部分的内容。

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

分布式配置管理的目前主流底层存储的方案,如果自己动手打造那么可选的无非就是下面这些:

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

也可以选择现有成型的开源产品:

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

APM领域的选择,商业产品很多,但是开源的选择实在不多:

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

在日志分析领域,ELK是王者,但是也有新秀出场:

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

结束语

洋洋洒洒的列举了几十个名字,但并不是让大家每个名字都去探索一遍,日常中如果需要做技术抉择,我有两句话:

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

  1. 仰望星空,看弱水三千:眼界要开阔,知识面要广,哪怕只是精通各种名字,至少,知道在某个地方有个好东西,知道某个领域有其他的选择

  2. 立足当下,吾只取一瓢:最终还是要落地的,能玩的转的东西才是好东西。另外,好东西虽多,找到一个能适合自己,能解决问题的就好了,别贪心,别贪多

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1


分享者简介:

敖小剑,PPmoney资深架构师,14年软件开发经验,对敏捷开发,架构设计有深入研究,曾在亚信,爱立信,唯品会任职。现任ppmoney基础架构负责人,负责Dolphin微服务架构和配套基础设施的开发,推进公司全面服务化。

这篇关于微服务技术栈选型,精彩的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1135866

相关文章

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

金融业开源技术 术语

金融业开源技术  术语 1  范围 本文件界定了金融业开源技术的常用术语。 本文件适用于金融业中涉及开源技术的相关标准及规范性文件制定和信息沟通等活动。

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出 在数字化时代,文本到语音(Text-to-Speech, TTS)技术已成为人机交互的关键桥梁,无论是为视障人士提供辅助阅读,还是为智能助手注入声音的灵魂,TTS 技术都扮演着至关重要的角色。从最初的拼接式方法到参数化技术,再到现今的深度学习解决方案,TTS 技术经历了一段长足的进步。这篇文章将带您穿越时

系统架构设计师: 信息安全技术

简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 系统架构设计师: 信息安全技术前言信息安全的基本要素:信息安全的范围:安全措施的目标:访问控制技术要素:访问控制包括:等保

前端技术(七)——less 教程

一、less简介 1. less是什么? less是一种动态样式语言,属于css预处理器的范畴,它扩展了CSS语言,增加了变量、Mixin、函数等特性,使CSS 更易维护和扩展LESS 既可以在 客户端 上运行 ,也可以借助Node.js在服务端运行。 less的中文官网:https://lesscss.cn/ 2. less编译工具 koala 官网 http://koala-app.

Spring的设计⽬标——《Spring技术内幕》

读《Spring技术内幕》第二版,计文柯著。 如果我们要简要地描述Spring的设计⽬标,可以这么说,Spring为开发者提供的是⼀个⼀站式的轻量级应⽤开发框架(平台)。 作为平台,Spring抽象了我们在 许多应⽤开发中遇到的共性问题;同时,作为⼀个轻量级的应⽤开发框架,Spring和传统的J2EE开发相⽐,有其⾃⾝的特点。 通过这些⾃⾝的特点,Spring充分体现了它的设计理念:在

基于SpringBoot的宠物服务系统+uniapp小程序+LW参考示例

系列文章目录 1.基于SSM的洗衣房管理系统+原生微信小程序+LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统+LW参考示例 3.基于SpringBoot+Vue的企业人事管理系统+LW参考示例 4.基于SSM的高校实验室管理系统+LW参考示例 5.基于SpringBoot的二手数码回收系统+原生微信小程序+LW参考示例 6.基于SSM的民宿预订管理系统+LW参考示例 7.基于

java线程深度解析(六)——线程池技术

http://blog.csdn.net/Daybreak1209/article/details/51382604 一种最为简单的线程创建和回收的方法: [html]  view plain copy new Thread(new Runnable(){                @Override               public voi