深入理解SpringCloud与微服务构建(读书有感)(一)

  • Post author:
  • Post category:其他


最近阅读了《深入理解SpringCloud与微服务构建》这本书,因为有记笔记的习惯,所以想整理下发一篇感想,不过文笔比较差,只能当笔记看了。目前是第一章节的



传统单体式架构的介绍

开篇对传统的单体式架构进行了简单的介绍:

单体式架构

1.nginx 客户端 外层进来的 入口 域名的 配置,一个整体的模块运行。

早前 并发优化:

1.负载均衡服务器(Nginx)

2.加应用服务器集群 配置多态 (多个单体式架构)

3.缓存服务器集群 (Redis缓存)

4.数据库的读写分离 MySQL 主从热备份 通过配置将主数据库服务器的数据同步到从数据库服务器,读写分离能改善数据库的负载能力

缺点:

1.单体架构 大量的业务代码,可读性,可维护行依然很差。

2.海量用户,数据库访问瓶颈。(解决方案:分布式数据库,将数据库进行分库分表,这个目前理解 就是 需要对业务细化,精确单一模块的业务场景,进行表的创建 和操作)



微服务是什么?

微服务:简而言之,微服务架构的风格就是将单一程序开发成一个微服务,每个微服务运行在自己的进程中,并使用轻量级机制通信,通常 HTTP RESTFUL API。这些服务围绕业务能力来划分构建的,并通过自动化部署机制来独立部署。这些服务可以使用不同的编程语言,以及不同数据储存技术,以保证最低限度的集中式管理。

几个关键点就是:

1.按业务划分一个独立运行的程序,即服务单元

2.服务之间通过HTTP协议相互通信

3。可以自动化部署

4.对服务单元没有编程语言的限制

5.对服务单元没有数据储存技术的限制

6.服务的集中化管理

7.微服务是一个分布式系统



怎么来划分这个微?

这个微是按业务来划分。业务的复杂程度,以及可拆分的程度,需要开发人员和团队自主决定。

服务和服务之间的通信:微服务单元之间可以通过HTTP这种简单的通讯机制。也可以通过轻量级的消息总线来通信,例如:RabbitMQ、Kafaka等mq,通过发送消息或订阅消息来打到服务于服务之间的通信目的。

微服务的多模块的部署考虑自动化部署(DevOps),可采用Docker容器技术,或自动化部署工具 开源组件Jenkins。

服务集中化管理 spring-cloud 采用Eureka组件,另外Zookeeper。Consul也是很好的服务集中化管理框架。

微服务是分布式架构,其复杂性要比单体式架构复杂的多,要注意的是 分布式事务,全局锁,全局ID等。

对于微服务的部署来说:Docker为容器技术,是微服务最佳的部署容器,DevOps是一种部署手段或理念。



目前考虑的 三大难题

服务故障的传播性(在我看来是熔断器的使用)

服务的划分(业务的明细话,根据业务的拆分)

分布式事务(应该就是解决数据的一致性 解决:考虑二阶段提交或三阶段提交);


新名词

:服务链路追踪。起因是 请求进来 进过个服务单元的处理,到最后的响应,多模块下的操作,导致问题很难定位。

常见的链路追踪组件有Google的Dapper、Twitter的Zipkin,以及阿里的Eagleeye(鹰眼);



Spring Cloud 常用组件

1、消息注册和发现 Eureka。Spring Cloud也支持Cunsul和ZooKeeper

2、熔断组件 Hystrix

3、负载均衡组件Ribbon,它通常和Eureka、zuul、RestTemplate、Fegin配合使用。

4、路由网关Zuul。和Ribbon一起用能够做到负载均衡、智能路由。

5、Spring Cloud Config 组件 配置文件统一管理。分为server端和Client端。它与Spring Cloud Bus相互配合刷新指定Client或所有Client的配置文件。

6、Spring Cloud Security 组件是对Spring Security 组件的封装。一般配合 Spring Security OAuth2组件一起使用,来搭建授权服务,用户验证和权限认证。验证Token或JWT来对微服务系统进行安全验证。

7、Spring Cloud Sleuth 是一个分布式链路追踪组件。 封装有Dapper,Zipkin和Kibana。通过它可以知道服务之间的依赖关系。以及调用情况。

8、Spring Cloud Stream是SpringCloud数据流操作包。可以封装Redis、RabbitMQ、Kafaka,实现发送和接收消息等。



版权声明:本文为weixin_38899094原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。