如何玩转微服务_软件供应链的博客-程序员资料

技术标签: 架构  

作者简介

黄朝兵,目前就职于一家跨国软件公司,任专家级开发工程师。曾就职于互联网金融企业、大型国企、日企等,分别任职技术经理,高级软件开发工程师,软件开发工程师。

微服务,软件应用开发的新纪元

2014年 Martin Fowler 在《MicroServices》论文中首次提出了微服务的概念。近些年,伴随着互联网的日益发展,微服务在国内、甚至国际上的发展已达到一个新高潮。

在微服务流行之前,SOA(Service Oriented Architecture)被广泛熟知与采用。微服务基于 SOA 发展而来,但与之相比,微服务更易于理解,也更利于设计者、开发者的实践落地,它把“面向服务”的设计思想实现得更加彻底。

微服务架构模式的优势与痛点

微服务架构建议实践者以“业务”来切分服务,鼓励开发者选择最适合的技术实现具体的服务,只需保证其对外提供的 API 接口保持一致即可。也就是说,微服务架构理念的出现,使得应用开发前的技术选型的选择空间更加宽广、灵活。

将系统拆分为多个微服务,也便于对每个微服务分别实施监控,不断收集每个微服务的具体指标。当某个微服务出现性能瓶颈时,可针对性的对该服务进行水平扩展以支撑当前大流量,而无需对整个系统进行横向扩展。

除了以上优点,微服务架构按业务拆分服务的理念,更使服务之间彼此隔离,相互之间不会产生影响。这也便于我们在开发过程中利用技术手段,更高效地实现自动化部署。

正因为这些优点,当前很多软件企业在开发新项目时,首先考虑的是微服务架构,甚至企业正将以前的老系统慢慢迭代为该架构模式。

当然,除了以上优点,微服务架构也存在以下缺点:

  1. 微服务粒度大小难以划分,需要设计人员对业务有很好的掌握;
  2. 分布式复杂性,主要体现在分布式事务、网络延迟、系统容错等问题解决难度较大;
  3. 微服务之间通信成本较高,对微服务之间网络稳定性,通信速度要求较高;
  4. 微服务数量较大,对运维人员的运维、部署工作带来较大的挑战。

微服务开发踩坑经验

经过多年来不断的探索与总结,在微服务设计、开发领域,我已积累了丰富的实战经验,深知微服务实践过程中各个痛点及难点。

避免大家再踩我之前所趟过的坑,让开发过程更加顺利、更专注于业务开发,我特别推出了我的达人课《微服务一站式开发》,它集合了自己在微服务开发过程中的所有经验总结,主要包括以下主要内容:

  1. 目前,微服务开发中,各大公司通常采用的技术主要有 Spring Boot、Spring Cloud,因此在课程的开篇首先会对 Spring Boot 的基础知识,以及它与其他常用的各大技术框架的整合进行演示,并带大家利用 Spring Cloud 整合 Consul 实现服务的注册、发现等;

  2. 微服务调用过程中,遇到网络等不稳定因素时,如果不加以控制,系统很容易发生雪崩效应。本课程将充分利用 Spring Cloud 相关特性教各位读者如何实现服务的熔断、降级、限流等功能,从而解决这一问题;

  3. 将整个系统按业务拆分成多个服务,这个过程需要解决微服务鉴权、分布式事务、分布式锁等关键问题。为此,本课程引入了 Spring Cloud Zuul 对微服务进行统一鉴权的讲解;对 Redis、Zookeeper 高级技术点的解读,及利用它们如何实现分布式锁的过程分析;对分布式事务的理论说明,以及消息中间件 RabbitMQ 之死信队列、发布确认、消费确认的应用指南,并利用它们实现数据的最终一致性,解决微服务分布式事务;还会讲解如何利用第三方开源框架实现数据的实时一致性等内容;

  4. 微服务的数量往往较大,运维人员面临着运维、部署困难等问题,为此课程为各位读者带来了微服务监控、Docker 的常用命令、架构以及容器管理平台 Rancher、K8S 等相关技术使用指南;

  5. 最后,课程将通过一个完整的项目,带大家了解微服务从开发,到代码提交,再到打镜像、自动拉起容器、容器的扩缩容等一系列完整的过程,并对其中使用到的关键技术和工具(如 Jenkins)一一进行精要说明。

为了方便大家更清晰地学习本课程,我们再来看下课程目录安排。

  • 第01-02课:主要演示微服务开发过程中,Spring、Spring MVC 常用主要知识点;

  • 第03-05课:主要演示在实际工作中,Spring Boot 如何整合诸如 Spring Data JPA、Redis、MongoDB、RabbitMQ、Elasticsearch 此类的常用技术;
    第06-09课:将对 Consul 相关知识做详解,并利用 Spring Cloud 和 Consul 实现服务的注册与发现;同时将演示 Spring Cloud常用组件(如 Zuul、Ribbon、Hystrix、Feign 等)在实际工作中使用方法;此外,在网关层整合 OAuth 2 实现微服务鉴权、配置中心及请求链路跟踪等内容也会在本部分进行详细解读与演示;

  • 第10-13课:首先会对 Redis 分片原理、集群搭建、分片数据迁移,Redis 与 Lua 脚本整合进行详解;接着,对 ZooKeeper 相关算法(如 Paxos、ZAB)进行介绍,并对其 watcher 的实现原理及 ZooKeeper 集群搭建过程作分析与说明;之后讲解如何利用 Redis、DB、ZooKeeper 等实现分布式锁,介绍分布式事务相关原理,并演示在工作中如何利用消息中间件实现数据最终一致性和利用第三方组件实现数据实时一致性等内容;

  • 第14课:主要演示如何实现微服务监控;

  • 第15-17课:介绍 Docker 架构及常用命令;对常用容器管理平台如 Rancher、K8S 进行详细说明,并说明工作中如何用其管理容器;

  • 第18课:实战部分,对前17课所讲内容进行综合实战,让读者了解在工作中如何应用以上技术。其中主要包括微服务开发、微服务网关、微服务调用、负载均衡、熔断、微服务鉴权、日志监控、配置中心、微服务镜像生成、容器管理平台搭建及如何管理容器等技术内容。

最后,我要对各位读者说明的是,经过本次课程的学习,我将带领大家的微服务开发能力再上一个新台阶。在学习的过程中,如果各位遇到任何问题,请通过 GitChat 的读者圈与我交流互动,我会尽力解答各位提出的问题。

扫码试读购买或点此试读购买

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/GitChat/article/details/81328516

智能推荐

android 背景图缩放,解决android:background背景图片被拉伸问题_weixin_39639600的博客-程序员资料

ImageView中XML属性src和background的区别:background会根据ImageView组件给定的长宽进行拉伸,而src就存放的是原图的大小,不会进行拉伸。src是图片内容(前景),bg是背景,可以同时使用。此外:scaleType只对src起作用;bg可设置透明度,比如在ImageButton中就可以用android:scaleType控制图片的缩放方式如上所述,backg...

qt用odbc连接mysql_【原创】Qt 使用ODBC driver 连接SQL Server_午餐时间到了的博客-程序员资料

最近在做数据库的课程设计。第一个需要解决的问题是使用什么工具来实现这个系统。经过一番资料查找,决定使用SQL Server Express 2012作为服务器,使用Qt作为编写客户端程序语言。问题是client如何连接SQL Server? 下面是我的解决方法。1.开启windows上的SQL Server 的ODBC驱动ODBC 是一个调用级接口,它使得应用程序得以访问任何具有 ODBC 驱动程...

翻页时钟代码大公开_lovefan的博客-程序员资料_翻页钟开源代码

不少朋友向我要翻页时钟的代码,现在贴给大家。代码水平有限,见谅。看不明白的可以问我:)js// miniprogram/pages/flipClock/jsconst moment = require('../../../utils/moment-with-locales.min.js');const Lunar = require('../../../utils/lunar.js');var startX, endX;var moveFlag = true; // 判断执行滑动事件.

JAVA切换不了FTP服务器目录_解决linux下ftp指定访问目录无法修改的问题_豪睿刘爱上楼楼梯的博客-程序员资料

他的系统是CentOS,是RH派系的。我把vsftpd安装配置好了,以为大功告成,但客户端访问提示如下错误:500 OOPS: cannot change directory:/home/ftp原因是他的CentOS系统安装了SELinux,因为默认下是没有开启FTP的支持,所以访问时都被阻止了。//查看SELinux设置# getsebool -a|grep ftpftpd_disable_tr...

.NET实现网络爬虫_hyunbar的博客-程序员资料_.net 爬虫

爬虫的特征和运行方式User-Agent:主要用来将我们的爬虫伪装成浏览器。Cookie:主要用来保存爬虫的登录状态。连接数:主要用来限制单台机器与服务端的连接数量。代理IP:主要用来伪装请求地址,提高单机并发数量。爬虫工作的方式可以归纳为两种:深度优先、广度优先。深度优先就是一个连接一个连接的向内爬,处理完成后再换一下一个连接,这种方式对于我们来说缺点很明显。 广度优先...

c web service_简单并快乐着的博客-程序员资料

转自 http://blog.163.com/wzbwzb_187/blog/static/6632425720106424158919/ 以下是源代码: /**************filename: Server.cpp**************** 该程序通过标准socket实现简单Http服务器 运行该服务器可以通过浏览器访问服务器目录下的 Html文件和j

随便推点

twisted builtins.TypeError: __init__() missing 1 required positional argument: 'dbpool'_锅前带刀小笼包的博客-程序员资料

学习爬虫异步插入,遇到问题Unhandled error in Deferred:2020-05-10 14:41:59 [twisted] CRITICAL: Unhandled error in Deferred:...builtins.TypeError: __init__() missing 1 required positional argument: 'dbpool'发现是函数名写错, 应该是from_settings ,结果写成了from_setting,低级错误,记录一下pip

Paxos、Raft、ZAB算法_知知之之的博客-程序员资料_paxos raft zab

Paxos算法是Leslie Lamport在1990年提出的一种基于消息传递的一致性算法。基于Paxos协议的数据同步与传统主备方式最大的区别在于:Paxos只需超过半数的副本在线且相互通信正常,就可以保证服务的持续可用,且数据不丢失。Paxos将系统中的角色分为提议者 (Proposer),决策者 (Acceptor),和最终决策学习者 (Learner):在多副本状态机中,每个副本同时具有Proposer、Acceptor、Learner三种角色。Paxos算法通过一个决议分为两个阶段(Learn阶段

Bibtex格式类型_小王同学w的博客-程序员资料_bibtex类型

出于保留资源和查找方便,转载自https://blog.csdn.net/kmsj0x00/article/details/85318057类型简介必需关键字可省略关键字@article期刊或杂志上的一篇文章。author, title, journal, year.volume, number, pages, month, [email protected]有确定出版社的书籍。author或editor, title, publisher, year.volume或number, series, address, e

SpringBoot-Google二步验证_apkqfa6158的博客-程序员资料

SpringBoot-Google二步验证概念:Google身份验证器Google Authenticator是谷歌推出的基于时间的一次性密码(Time-based One-time Password,简称TOTP),只需要在手机上安装该APP,就可以生成一个随着时间变化的一次性密码,用于帐户验证。Google身份验证器是一款基于时间与哈希的一次性密码算法的两步验证软件令牌,此软件...

Maven_weixin_41249041的博客-程序员资料

maven帮助构建项目 项目和项目之间的依赖关系,管理jar包。项目管理工具,管理java项目:1、项目对象模型 POM对象模型,每个maven工程中都有一个pom.xml文件,定义工程所依赖的jar包、本工程的坐标、打包运行方式。。2、依赖管理系统(基础核心 )maven通过坐标对项目工程所依赖的jar包统一规范管理。3、maven定义一套项目生命周期清理、初始...

css教程系列5:px、em、rem区别介绍_邢晋宇的博客-程序员资料

1 PXpx像素(Pixel)。相对长度单位。像素px是相对于显示器屏幕分辨率而言的。PX特点1. 浏览器无法调整px单位的字体,以em或rem为字体单位可调整字体。 2 EMem是相对长度单位。EM特点1. em的值并不是固定的;2. 行高:n倍的 em = n *父级元素的像素px大小(若无则*浏览器的默认字体)。3 REMrem是CSS3新增的一个相对单位(root em,根em),也是相对...

推荐文章

热门文章

相关标签