微服务终极笔记:穿针引线“直取京都”,拒绝散兵游勇

前言 

学知识最忌讳“东一榔头,西一棒子”,除非你有学霸的意志力,孜孜不倦的学习态度。学霸和学渣总是倍受关注,然而大多数人都是介于学霸与学渣之间。

有多少能坚持不懈地埋在书海里抗住寂寞呢?同样地也没有人真正的愿意荒废人生,飘渺度日。谁不想努力呢?

为什么用微服务?解耦!不要管什么多语言开发、独立部署、可拓展性、独立数据库、团队拆分敏捷开发,就两字:解耦!!!!!再问割JJ

举个例子?  缴费和积分作为例子,如果积分服务挂了,缴费可以正常用,因为他们部署在不同的主机上。

微服务概念?  微服务架构是一种架构模式,它单一应用程序划分成一组小的服务,每个服务是一个独立的进程,服务之间互相协调、互相配合。服务之间采用轻量级的通信机制相互协作(通常是基于HTTP协议的restful api)。

单体架构到微服务的演变过程:业务少---》单体架构美滋滋

--》业务增多应用性能差---》读写分离、加缓存、加负载均衡服务器、应用集群化部署

---》管理混乱,治理难度大,头疼 ----》考虑分布式系统,微服务架构。(后续不分先后)--》注册中心统一管理各个服务

---》配置太多了烦死了---》加个配置中心

---》部署那么多机器有些机器访问大吃不消,有些机器又长期空闲---》搞个负载均衡

----》服务跑着跑着发现有一个服务B主机挂了,服务A调用了B,导致A出现大量线程阻塞,最后A也挂了,最后就是大量微服务挂了“雪崩效应”-----》加个熔断器

----》什么阿猫阿狗都调我的服务,我不想让他们调,得加个权限控制和路由转发功能----》增加网关

---》今天被投诉了,有一个客户缴费了,一个星期过去了没有看到积分增加。原来是之前积分微服务挂了,缴费成功了积分却没涨。------》谈谈分布式事务解决方案(两阶段、TCC等)

---》生产出现一个问题,中间调用了N个微服务,不知道是哪个环节出问题,我还不知道具体的调用链路,查个鬼,怎么甩锅------》调用链路跟踪(Zipkin)

---》美滋滋,运行的稳稳地,突然领导说:你看下我们有多少个接口,调用量如何 ----》mmp....

 

微服务有哪些核心组件?  注册中心、负载均衡、服务熔断/降级、网关、配置中心、远程调用等。

微服务开发的方式主要有一下三种:
 1、dubbo+zookeeper   
 2、spring boot+spring cloud
 3、ServiceComb
dubbo :是一个RPC框架,底层是netty(netty是什么?是对NIO一种封装改进,简单来说是一种高性能网络通讯框架。什么是NIO?哥屋恩!),微服务间调用、负载均衡、服务注册。
zookeeper:服务注册中心
spring boot:spring全家桶的封装,不是新技术。
spring cloud:基于springboot一套微服务框架,一种解决方案。
servicecomb:也是apache开源框架。兼容springcloud的微服务框架,使用Saga提供一站式解决方案,服务部署治理监控。

微服务间的通信方式:REST协议(http-文本)、RPC(二进制)。

RPC:本质是将对象转为二进制,然后通过socket进行网络通信的过程。被调用方拿到二进制数据后,再转为java对象,调用具体的接口。Dubbo就是一个RPC框架,底层是Netty实现的。

Netty:  https://mp.csdn.net/editor/html/114745014

微服务架构三大难题? 不好拆分、分布式事务、单个故障引起上层大量线程阻塞。

部署容器对比
单体:tomcat、jettry等serlet容器
微服务:Docker容器

事务差异比对

单体:通过Transactional、数据库本身的事务来控制。
微服务:分布式事务,解决方案有二阶段提交、三阶段、TCC、MQ消息事务等。

springcloud 五大组件:注册中心eureka、负载均衡ribbon、服务熔断hystrix、配置中心springcloudconfig、网关zuul。其实还有远程调用feign。

开胃菜结束!

任何事情,如果太多人知道,那你就没有优势了。


微服务CAP理论:Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),不可能同时满足“一致性”、“可用性”、“分区容错性”。

注册中心的类型有AP和CP,AP优先保证可用性,CP优先保证一致性。AP代表:zookeeper。CP代表:springcloud的eureka,阿里的nacos既可以支持AP也支持CP 。

虽然现在很多用nacos替换eureka,

eureka分为客户端和服务端,一个eureka既可以是客户端也可以是服务端。Client在服务启动后每30s发送心跳,Server 每90s检查一次是否有接收到心跳。可惜的是eureka2.0之后就停止更新了。目前一般是由阿里的nacos替代。

什么是Eureka的自我保护模式

默认情况下,如果Eureka Service在一定时间内没有接收到某个微服务的心跳,Eureka Service会进入自我保护模式,在该模式下Eureka Service会保护服务注册表中的信息,不在删除注册表中的数据,当网络故障恢复后,Eureka Servic 节点会自动退出自我保护模式。

服务端会出现如下错误警告:

EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.

 

猜你喜欢

转载自blog.csdn.net/x18094/article/details/114737297