我的编程空间,编程开发者的网络收藏夹
学习永远不晚

微服务的理想与现实

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

微服务的理想与现实

微服务的理想与现实

随着云原生微服务的日益火热,很多人都开始对微服务的相关知识内容感兴趣。本篇内容,旨在扫盲(意思是小白可入),希望能对大家有帮助。如有问题,欢迎大家一起讨论,共同学习进步。

01 微服务从哪里来?--- 服务架构的演进史

互联网初期, 2G还是个时髦词儿,人们的需求也很朴实,一个静态网站告诉大家我是谁、一个留言板让大家能够与我联系,就能满足信息传播和互相交流的需要。于是码农们给我们提供了这样一套解决方案:界面+业务处理+数据处理,通过一个zip包就可完成所有的事情,这也就是服务架构的单体架构时代。

微服务的理想与现实图片为作者原创

随着3G的普及,越来越多的人们可以通过PC上网了,此时BBS、门户咨询网站的出现开始吸引着大量观众。当漂亮的交互更能抓人眼球、有趣的信息瞬间引爆千万用户在线围观时,“并发“问题产生了,于是码农们加班奋战,将系统分为前端和后端,通过拆分出可复用的中间件,来提升业务处理能力、解决并发问题,这便是分层架构时代的到来。

微服务的理想与现实图片为作者原创

后来,互联网进入微博时代,几乎网民都有Blog,打开手机就刷weibo。而此时的分层架构面对更复杂服务要求时,在应用扩展、服务调用、扩容等方面都越发桎梏,于是服务架构走进了面向服务的架构(SOA)时代。SOA网上说的很多,这里列举几个关键词:中心化的服务治理, ESB(企业服务总线)中心化、服务之间通过精确定义的接口进行通讯、耦合度更低、扩展性更高、维护成本较高。

微服务的理想与现实图片为作者原创

又过了几年,电商掀起了各个时节的线上大促活动,与之伴随而来的还有持续交付、灰度发布、服务限流、容错保护、链路跟踪、日志监控、弹性伸缩等等一大串需求,也还有程序员日益见秃的头顶和度数越来越深的眼镜。当运维压力已经赶不上业务的快速发展时,微服务时代来临。可以这样理解,微服务架构也是SOA架构分布式化的一种实现方式。它的优势在于小而治之、去中心化,但与之对应的问题是,你要管理越来越多的微服务。而如何进行微服务拆分和服务治理,是十分考验能力的试金石。

纵观前后,服务架构历次的迭代更新,都是围绕着用户如何节约成本和提升效率,来解决不断出现的新问题,微服务就是服务架构演进史的产物之一。

02 微服务是什么?

微服务的理想与现实图片为作者原创

微服务最流行的定义是由 Martin Fowler 与 James Lewis 于 2014 年共同提出。引用老爷子们的说法:

  • 微服务是架构层的一个概念,通过分解(业务单元),将项目拆解出 n 个单元,互相没有强依赖关系(解耦),自我准备需要的依赖条件,进而达到可以独立运行、独立部署,不再受环境与地点上的限制。
  • 微服务架构风格是一种使用一套小服务来开发单个应用的一种方式,每个服务运行在自己的进程中,并使用轻量级机制通信,通常采用HTTP资源API这样轻量的机制来相互通信,这些服务围绕业务功能进行构建,并能够通过自动化部署机制来独立部署,这些服务使用不同编程语言实现,以及不同数据存储技术,并保持最低限度的集中式管理。

微服务的理想与现实

根据InfoQ发布的2019架构和设计领域趋势报告显示,微服务架构已经走过了盲目追捧阶段,开始逐渐走向成熟,走向切实可落地阶段。

微服务的理想与现实图片来源:InfoQ发布的2019架构和设计领域趋势报告

03 如何选?适合的才是最好的

在我们选择之前,先来看看有什么能够选的?

微服务框架的分类

目前市场上已经出现的微服务框架非常多,他们各有所长。常见的微服务框架都有哪些呢?

如果从常见微服务框架形式分类来看,目前主要分为4类。

  • 组件类——用户可以按需加载使用。常见的有Kubernetes、Eureka/Consul/etcd、ZipKin/Jagger等。
  • 集成类——集成类的优势在于简化了分布式系统基础设施的开发,提供服务发现注册、配置中心、消息总线、负载均衡、数据监控等内容。常见的有Spring Cloud、Dubbo等。
  • 网格类——常见的有Istio、Linkerd、Kong Mesh等。
  • 无服务类——目前主要是大厂在使用,常见的有Knative、OpenFaaS、Kubeless、Fission等。

如果按照目前的主流生态体系来看,目前有三大生态体系:

  • Spring Cloud家族(https://www.)
  • Dubbo家族(http:// )
  • 云原生家族(https://www.)

这里特提供了官方地址供大家学习,本文不再详细展开讨论,每一个家族都需要熬夜掉一把头发,潜心实践和学习才能掌握。

总而言之,微服务的核心是服务治理,而服务治理就需要好的微服务框架,要不然微服务化可能是灾难!但做为用户,选择适合自己实际情况的才是最好的。

选择适合自己的微服务框架

那么我们该如何选择微服务框架呢?依赖于业务特点和技术能力。先选定方向,再研究技术细节。下面关于方向选择的思路供各位参考:

如果你的业务模块与服务治理是整合在一起的,依托特定开发语言和开发框架,通过配置来调整规则和策略,依赖业务上线对服务治理进行功能升级,那么你可能比较适合集成方式进行服务治理。你可以在Spring Cloud、Dubbo生态中去选择合适自己的方式。

如果你的业务模块与服务治理是分开的,与开发语言无关、与开发框架无关,通过动态调整来配置运行时各种规则和策略,服务治理功能升级独立于业务模块,那么你可能比较适合服务网格的方式进行服务治理。你可以在云原生家族中去选择合适自己的方式,比如尝试下Istio。

什么时候引入微服务?

微服务不是万能的,换句话说,微服务未见得适合于你。

微服务的理想与现实

1)天时

在业务运行初期,如果你是单业务系统架构,如果业务量不大且复杂性不高,如果你追求快速响应、开拓服务、节省成本、提高效率,那么你可能真的用不着微服务。比如你如果只是要用CMS做一套公司网站,那真的可能不用微服务这把牛刀。当随着你的业务进入扩展期,你的系统架构开始走向面向服务架构,业务不断扩大,业务系统复杂性不断提高,但效率在不断下降,那么这个时候你可以开始考虑业务拆分、使用微服务了。

2)地利

如果要进行微服务改造,还需要具备一定的资源条件,如物理机资源、网络资源。举个例子:假设一个电商平台,现状如图。如果业务框架不那么复杂则可考虑不用微服务架构。而如果需要进行微服务改造,那么至少需要准备规划好如下资源:

  • 硬件资源:主机/容器、数据库
  • 软件资源:注册中心、拆分的服务、负载均衡、网关、缓存、监控软件
  • 人力资源:至少需要架构师构建微服务、前端、后端、测试,其中运维的角色可以由研发+微服务平台 代替。

微服务的理想与现实

3)人和

如果要享受微服务带来的优势,就需要接受微服务带来的挑战。比如:

  • 虽然微服务的服务边界限定,每个团队可以独立维护演进自己的服务,但是当服务扩展到几十个甚至上百个后,就需要考虑分布式带来的复杂性。
  • 如果说不同服务可独立部署、独立扩展,那么维护不同版本和版本兼容就是需要面对的挑战。
  • 如果说不同的服务可以采用不同的技术栈,只需按照约定好的通信协议即可完成交互,那么服务之间的认证/鉴权/证书管理,共享数据与分离数据后如何保持一致性等一系列复杂的问题等,就是需要面对的挑战。
  • ……

总之,使用微服务也是需要天时地利人和的,使用的过程也不要一蹴而就,服务治理是巨大的挑战。

你的业务适合微服务吗?我收集整理了几个最简单的问题以供快速自测:

微服务的理想与现实

04 微服务化的实施方法

简单来说4步走:

微服务的理想与现实

其实每一步都有可能会有“坑”,这里面都是学问,都可独立成章。因此,本文不详细展开,以后再写相关内容文章详谈。

但是,Demo可以快速帮我们一探究竟,这里我选择了京东智联云的微服务平台来做体验。

为啥是云上公有云产品?

因为微服务的体系太复杂庞大了,如果你自建,1个人搞不定1个团队的工作内容。

还因为在“云”上是托管服务,少运维,所见即所得组件多,开源、多可用区、上手够简单够快、学习和使用成本低呀。

简单总结下我的学习路径:

体验“云”上高可用注册中心

如果您已有成熟的微服务项目,目前正在上云过程中,希望享受 “云” 带来的注册中心多可用区部署、最大程度的保证集群高可用的能力。那么可以直接使用微服务平台的命名空间注册中心功能。目前JDSF支持的微服务框架包含:SpringCloud、Dubbo、JSF。使用大致步骤如下:

微服务的理想与现实

入门示例参见:https://distributed-service-framework/basic-examplehttps://distributed-service-framework/basic-examplehttps://distributed-service-framework/demo-deploy-k8shttps://distributed-service-framework/gw_vpc

怎么样,微服务看上去是不是又没有那么抽象、那么难、那么抓狂了呢?!更多内容下次再分解。

微服务的理想与现实微服务的理想与现实

欢迎点击“京东智联云”了解更多精彩内容!

微服务的理想与现实

微服务的理想与现实

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

微服务的理想与现实

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

微服务的理想与现实

随着云原生微服务的日益火热,很多人都开始对微服务的相关知识内容感兴趣。本篇内容,旨在扫盲(意思是小白可入),希望能对大家有帮助。如有问题,欢迎大家一起讨论,共同学习进步。01 微服务从哪里来?--- 服务架构的演进史互联网初期, 2G还是个
2023-06-03

Golang 微服务:实现原理与应用实践

《Golang 微服务:实现原理与应用实践》随着云计算和容器化技术的发展,微服务架构越来越被广泛应用于各类软件系统中。而作为一种高效、轻量级的编程语言,Go 语言(Golang)在微服务开发中也表现出色。本文将探讨 Golang 微服务的
Golang 微服务:实现原理与应用实践
2024-02-29

PHP 微服务架构的设计与实现

php 微服务架构遵循单一职责、松散耦合、可扩展性、容错性原则,通过案例示范创建用户管理微服务。微服务通常部署在 docker 或 kubernetes 中,监控性能、可用性、错误和依赖关系至关重要,以实现可扩展、容错、可维护的应用程序。P
PHP 微服务架构的设计与实现
2024-05-08

Golang Facade模式的设计思想与实现原理

Golang中的Facade模式是一种结构型设计模式,它提供了一个统一的接口,用于隐藏子系统的复杂性,使得子系统更容易使用。Facade模式通过提供一个简单的接口来封装一些复杂的操作,使得客户端可以更方便地与子系统交互。实现Facade模式
2023-10-08

微服务的服务注册与发现实践示例分析

本文小编为大家详细介绍“微服务的服务注册与发现实践示例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“微服务的服务注册与发现实践示例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1 服务注册中心前面我们对
2023-06-29

Golang在微服务架构中的设计与实现

go语言中微服务的设计与实现可以遵循以下原则:定义明确的服务边界,实现松散耦合。利用grpc、rest api和channels实现微服务。将业务逻辑封装在接口中,通过明确定义的接口实现服务通信。Go 语言中微服务的设计与实现前言微服务是
Golang在微服务架构中的设计与实现
2024-05-12

百亿流量微服务网关的设计与实现

本文从百亿流量交易系统微服务网关(API Gateway)的现状和面临的问题出发,阐述微服务架构与 API 网关的关系,理顺流量网关与业务网关的脉络,分享API网关知识与经验。API网关概述“计算机科学领域的任何问题都可以通过增加一个间接的
2023-06-05

基于Go语言的微服务架构设计与实现

随着云计算和容器化技术的快速发展,微服务架构已经成为了构建大型分布式系统的首选架构之一。微服务架构的核心理念是将复杂的单体应用拆分成一系列小而独立的服务,通过轻量级的通信方式进行交互,从而提高系统的可伸缩性、可靠性和可维护性。而Go语言作为
基于Go语言的微服务架构设计与实现
2023-11-20

微服务SpringBoot整合RedisBitMap实现签到与统计

这篇文章主要介绍了微服务SpringBoot整合RedisBitMap实现签到与统计,需要的朋友可以参考下
2023-01-09

微服务治理与统计分析

转载本文需注明出处:微信公众号EAWorld,违者必究。引言:微服务架构下,服务拆得越细,服务的粒度越小,可组装性就越好;与之相对的服务之间的调用关系就会变复杂,为了保证服务更好的运行,需要对这些服务进行监控和管理。本文大家介绍下EOS微服
2023-06-05

PHP 微服务容器化服务发现与负载均衡实践

问题:如何在 php 微服务容器化环境中实现服务发现和负载均衡?答案:通过整合 kubernetes 的服务和 ingress 对象。具体步骤:创建 kubernetes 服务,实现服务发现:使用 yaml 配置创建服务对象。在应用中查询
PHP 微服务容器化服务发现与负载均衡实践
2024-05-08

golang微服务怎么实现

Go语言的微服务可以通过以下步骤来实现:设计服务接口:确定微服务的功能和接口,定义服务的输入输出参数。创建服务模块:使用Go语言编写服务模块,将服务的功能封装在一个独立的模块中。这个模块可以是一个独立的包,也可以是一个独立的项目。定义服务路
2023-10-23

Spring Cloud Consul:服务发现与管理,全方位掌控你的微服务生态

Spring Cloud Consul:让服务发现与管理成为微服务生态中的制胜法宝
Spring Cloud Consul:服务发现与管理,全方位掌控你的微服务生态
2024-03-07

PHP 微服务容器化监控与日志管理实战

php 微服务容器化监控与日志管理监控:使用 prometheus 和 grafana 监控资源使用情况、请求数和延迟。日志管理:使用 elk stack(elasticsearch、logstash、kibana)收集、解析和可视化日志。
PHP 微服务容器化监控与日志管理实战
2024-05-08

微服务 Spring Boot 整合 Redis BitMap 实现 签到与统计

文章目录 ⛄引言一、Redis BitMap 基本用法⛅BitMap 基本语法、指令⚡使用 BitMap 完成功能实现 二、SpringBoot 整合 Redis 实现签到 功能☁️需求介绍⚡核心源码 三、SpringBoo
2023-08-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录