浅谈微服务

简介: 微服务兴起已经多年了,这几年已到大发展阶段。公司内部做了很多和微服务相关的事情,自己也看了一些微服务相关的内容。现在再来认识”微服务“三个字,终于有点懂了的感觉。

简介

微服务兴起已经多年了,这几年已到大发展阶段。公司内部做了很多和微服务相关的事情,自己也看了一些微服务相关的内容。现在再来认识”微服务“三个字,终于有点懂了的感觉。

学习期间看过的内容有

  1. 微服务设计
  2. 云原生分布式存储基石:etcd深入解析
  3. Docker技术入门与实战
  4. 每天5分钟玩转Kubernetes
  5. 左耳听风
  6. 从0开始学微服务

出现原因

微服务为什么会出现?我觉得这是互联网发展的必然结果。

如同以前没有IOS七层模型的时候,当时的程序员做编程,他们需要自己做七层模型做的事情,这个事情每一个程序员都需要做,造成了大量的资源浪费,而且每个人做出的效果也很难说完美。然后IOS七层模型出现了,统一的规范帮程序员完成重复性工作,大大提升了开发效率。

这么看来的话,微服务做的是相同的事情。

互联网历经几十年的发展,头部公司规模巨大,碰到大量问题,而这些问题每一个企业都可能遇到。在很多事情上大家都在重复造轮子,而且很多时候做的也未必很好。高人们在吸收优秀实践的基础上,结合自己广博的学识,推动了微服务的发展。

目前看微服务形成统一标准还比较困难,一是从整个发展阶段来看,现在还是处于初期,相关的微服务人才并没有大量出现,二是各个公司自身业务情况不一样,很难完全统一。但是,微服务其实已经成燎原之势,在不久的将来,可能开一家互联网公司会变得更加简单,微服务会像TCP/IP一样,对开发人员来说是完全透明的,开发人员只需要关注开发业务逻辑即可,当然,前提是发展到这个阶段,还需要程序员的话。

开发这种通用性的微服务平台,倒也是很不错的一个创业方向。

所以作为当代程序员,学习微服务还是必须的,这是必然的趋势,也能增加自己的竞争力。假如真有一天,微服务和TCP/IP一样透明了,懂微服务核心原理的人仍然更有价值,毕竟到时候只有这些人才能解决某些神奇的问题。

体系

微服务的水挺深的,准确的说,不仅深还特别广。微服务涉及的内容特别多,而且每一块都可以深入研究,成为这方面的专家。

在《微服务设计》这本书里,给微服务下的定义为:微服务就是一些协同工作的小而自治的服务。

这个定义不是特别好,总感觉是把微服务的范围缩小了。

另外阅历不同对这句话的理解上差距还是蛮大的。记得以前我有一个评论系统,评论服务、评论后台、DB、缓存等都是独立部署的,我当时觉得这个评论系统就是微服务。这么说不能算百分之百的错,但肯定也不是正确的。

因为微服务阐述的是一整套体系,单单一个独立的服务,只占微服务很小的一部分。

微服务主要由6部分构成

  1. 服务描述

    类似服务的说明文档,简单但不可或缺。比如,服务调用首先要解决的问题就是服务如何对外描述。比如,你对外提供了一个服务,那么这个服务的服务名叫什么?调用这个服务需要提供哪些信息?调用这个服务返回的结果是什么格式的?该如何解析?这些就是服务描述要解决的问题。

  2. 注册中心

    有了服务的接口描述,下一步要解决的问题就是服务的发布和订阅,就是说你提供了一个服务(Provider),如何让外部(Consumer)想调用你的服务的人知道。这个时候就需要一个类似注册中心(Registry)的角色,服务提供者将自己提供的服务以及地址登记到注册中心,服务消费者则从注册中心查询所需要调用的服务的地址,然后发起请求。

  3. 服务框架

    通过注册中心,服务消费者就可以获取到服务提供者的地址,有了地址后就可以发起调用。但在发起调用之前你还需要解决以下几个问题。服务通信采用什么协议?是RESTful API还是gRPC?数据传输采用什么方式数据压缩采用什么格式?这些活通常集成到了我们的服务框架里面,市面上有很多这样的开源框架,相对都比较成熟,接下来考验你的是快速上手的能力。

  4. 服务监控

    一旦服务消费者与服务提供者之间能够正常发起服务调用,你就需要对调用情况进行监控,以了解服务是否正常。通常来讲,服务监控主要包括三个流程,指标收集,数据处理,数据展示。监控是为了发现问题和异常,如果要进一步跟踪和定位问题,则需要进一步了解服务追踪。

  5. 服务追踪

    除了需要对服务调用情况进行监控之外,你还需要记录服务调用经过的每一层链路,以便进行问题追踪和故障定位,最后达到接近问题的目的。服务监控和追踪可以合并起来,但是要明确各自的职责是不一样的。

  6. 服务治理

    服务监控能够发现问题,服务追踪能够定位问题所在,而解决问题就得靠服务治理了。服务治理就是通过一系列的手段来保证在各种意外情况下,服务调用仍然能够正常进行。就目前开源的服务框架,大部分都不包括服务治理的内容,所以有可能这块是需要你和你的团队进行定制化开发,就看你做到什么程度了,就好比你有数据库但是你没有ER图描述,并不影响你用微服务,当然如果有就是锦上添花的东西了。

这6部分组合起来才称之为微服务。下面的链接是我做的一个思维导图,导图里面的有些内容我还没有完全学会,后期会做进一步的整理,如果大家喜欢的话,可以先记一下这个链接。

https://www.processon.com/view/link/5f3952a17d9c0806d41a90a9

学习路线

微服务算是集现代互联网技术大成者。我是初学者,需要给自己建立一条学习路线,这样能够帮助自己更好的掌握内容。

对于学习路线,我认为有几个原则:

  1. 找出必学内容并做笔记

    • 以前看过很多文章或者书籍,但是没有把内容写下来,总觉得学得比较浅,将内容消化后写出来,能够加深印象
    • 必学的内容应该是核心内容,像k8s、docker、分布式等是百分之百需要学习的
  2. 不必学

    • 同一个方案有多个技术选型,只学一个就行。如服务编排只要看k8s,因为这个已经算是行业标准。服务追踪可以从zipkin和skywalking中选择一个
    • 有些内容特别偏向于运维层面,可以了解浅一点或者完全不去了解
  3. 不断更新和丰富脑图
  4. 学习过程中,需要进行实践,最终搭建出基础款微服务。

目前计划学习以及重新学习的内容有

  1. k8s
  2. docker
  3. Etcd
  4. GRPC
  5. Netty
  6. Dubbo
  7. ELK
  8. Grafana
  9. Kafka
  10. Skywalking
  11. Apollo
  12. Istio

其实除了这些,微服务还有很多其他的内容需要学习,这些内容可以在今后慢慢补齐。

资料

  1. 微服务学习架构路线图(初稿)
  2. 微服务学习导航
  3. 【干货分享】可能是东半球最全的.NET Core跨平台微服务学习资源

最后

大家如果喜欢我的文章,可以关注我的公众号(程序员麻辣烫)

往期文章回顾:

技术

  1. 浅谈微服务
  2. TCP性能优化
  3. 限流实现1
  4. Redis实现分布式锁
  5. Golang源码BUG追查
  6. 事务原子性、一致性、持久性的实现原理
  7. CDN请求过程详解
  8. 记博客服务被压垮的历程
  9. 常用缓存技巧
  10. 如何高效对接第三方支付
  11. Gin框架简洁版
  12. InnoDB锁与事务简析

读书笔记

  1. 如何锻炼自己的记忆力
  2. 简单的逻辑学-读后感
  3. 热风-读后感
  4. 论语-读后感

思考

  1. 对项目管理的一些看法
  2. 对产品经理的一些思考
  3. 关于程序员职业发展的思考
  4. 关于代码review的思考
  5. Markdown编辑器推荐-typora
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
运维
商业航天:太空旅行的商业化进程
【9月更文挑战第28天】商业航天正逐步成为航天领域的重要力量,太空旅行的商业化进程也在加速推进。随着技术的不断创新和市场的不断扩大,太空旅行将逐渐从梦想走向现实。未来,商业航天将继续推动太空旅行的商业化进程,为人类探索未知领域和实现太空梦想贡献更多力量。
|
运维 监控 负载均衡
动态服务管理平台:驱动微服务架构的高效引擎
动态服务管理平台:驱动微服务架构的高效引擎
257 17
|
中间件 算法 搜索推荐
|
10月前
|
人工智能 安全 算法
《生成式AI牵手量子密码学,网络安全开启“超维”防护》
在数字时代,网络安全至关重要。传统防护手段逐渐失效,量子密码学与生成式AI的结合带来了新曙光。量子密码学基于量子力学原理,提供无条件安全的密钥分发;生成式AI则通过智能分析和模拟攻击,提升检测与防御效率。两者携手,优化密钥管理、加密算法及数据隐私保护,为网络安全带来全方位突破。学术界与产业界的共同努力将推动这一变革,构筑坚不可摧的安全防线。
440 4
|
11月前
|
JavaScript 前端开发 Java
编程语言中的常见Bug及解决方案
本文总结了主流编程语言中的常见Bug及其解决方案,涵盖JavaScript、Python、C/C++、Java和Go。例如,JavaScript中小数相加精度不准确,可通过`toFixed()`解决;Python 2中整数除法向下取整,改用浮点数除法;C/C++内存管理与缓冲区溢出,使用安全函数如`snprintf`;Java空指针异常,使用非空判断或`Optional`类;Go并发编程中的竞态条件,采用互斥锁或原子操作。了解这些Bug及解决方案有助于提高编程质量。
276 9
|
11月前
|
算法 搜索推荐 Java
【潜意识Java】深度解析黑马项目《苍穹外卖》与蓝桥杯算法的结合问题
本文探讨了如何将算法学习与实际项目相结合,以提升编程竞赛中的解题能力。通过《苍穹外卖》项目,介绍了订单配送路径规划(基于动态规划解决旅行商问题)和商品推荐系统(基于贪心算法)。这些实例不仅展示了算法在实际业务中的应用,还帮助读者更好地准备蓝桥杯等编程竞赛。结合具体代码实现和解析,文章详细说明了如何运用算法优化项目功能,提高解决问题的能力。
514 6
|
前端开发 JavaScript
Webpack 常用 Loader 和 Plugin
【10月更文挑战第12天】Webpack 是一个强大的模块打包工具,能够将各种资源模块进行打包和处理。Loader 用于转换模块的源代码,如 `babel-loader` 将 ES6+ 代码转换为 ES5,`css-loader` 处理 CSS 文件等。Plugin 扩展 Webpack 功能,如 `HtmlWebpackPlugin` 自动生成 HTML 文件,`UglifyJsPlugin` 压缩 JavaScript 代码。通过合理配置和使用 Loader 和 Plugin,可以构建高效、优化的项目。
351 58
|
12月前
|
XML JSON 网络协议
【网络原理】——拥塞控制,延时/捎带应答,面向字节流,异常情况
拥塞控制,延时应答,捎带应答,面向字节流(粘包问题),异常情况(心跳包)
|
存储 监控 数据挖掘
计算机网络的功能
计算机网络支持信息交换、资源共享、分布式处理、可靠性增强及集中管理。信息交换涵盖多种媒体形式,促进远程协作;资源共享降低用户成本,提高效率;分布式处理提升计算能力;冗余机制保障系统稳定;集中管理简化网络维护,确保安全运行。
500 2
|
Web App开发 Python
DrissionPage 实战:极简壁纸爬取之旅
本文介绍了如何使用DrissionPage工具自动化爬取极简风格的壁纸图片。通过简单的环境搭建和代码实现,展示了从访问目标网站、定位图片元素到下载保存的全过程。文中还提供了详细的代码示例,帮助读者快速上手。
526 4

热门文章

最新文章