持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第13天,点击查看活动详情 微服务配置管理
作用:统一管理一个或多个服务的配置信息, 集中管理。
Disconf
Distributed Configuration Management Platform(分布式配置管理平台) , 它是专注于各种分布式
系统配置管理 的通用组件/通用平台, 提供统一的配置管理服务, 是一套完整的基于 zookeeper 的
分布式配置统一解决方案。
SpringCloudConfig
Apollo
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不
同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,
用于微服务配置管理场景。
权限认证
作用:根据系统设置的安全规则或者安全策略, 用户可以访问而且只能访问自己被授权的资源,
不多不少。
Spring Security
Apache Shiro
Apache Shiro™ is a powerful and easy-to-use Java security framework that performs
authentication, authorization, cryptography, and session management. With Shiro’s easy-
to-understand API, you can quickly and easily secure any application – from the smallest
mobile applications to the largest web and enterprise applications.
批处理
作用: 批量处理同类型数据或事物
Spring Batch
定时任务作用: 定时做什么。
Quartz
微服务调用 (协议)
通讯协议
Rest
通过 HTTP/HTTPS 发送 Rest 请求进行数据交互
RPC
Remote Procedure Call
它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC
不依赖于具体的网络传输协议,tcp、udp 等都可以。
gRPC
A high-performance, open-source universal RPC framework
所谓 RPC(remote procedure call 远程过程调用) 框架实际是提供了一套机制,使得应用程序之间
可以进行通信,而且也遵从 server/client 模型。使用的时候客户端调用 server 端提供的接口就
像是调用本地的函数一样。
RMI
Remote Method Invocation
纯 Java 调用
服务接口调用
作用:多个服务之间的通讯
Feign(HTTP)Spring Cloud Netflix 的微服务都是以 HTTP 接口的形式暴露的,所以可以用 Apache 的
HttpClient 或 Spring 的 RestTemplate 去调用,而 Feign 是一个使用起来更加方便的 HTTP 客戶
端,使用起来就像是调用自身工程的方法,而感觉不到是调用远程方法。
服务熔断
作用: 当请求到达一定阈值时不让请求继续.
Hystrix
Hystrix is a latency and fault tolerance library designed to isolate points of access to remote
systems, services and 3rd party libraries, stop cascading failure and enable resilience in
complex distributed systems where failure is inevitable.
Sentinel
A lightweight powerful flow control component enabling reliability and monitoring for
microservices. (轻量级的流量控制、熔断降级 Java 库)
服务的负载均衡
作用:降低服务压力, 增加吞吐量
Ribbon
Spring Cloud Ribbon 是一个基于 HTTP 和 TCP 的客户端负载均衡工具, 它基于 Netflix
Ribbon 实现
Nginx
Nginx (engine x) 是一个高性能的 HTTP 和反向代理 web 服务器, 同时也提供了 IMAP/POP3/SMTP
服务
Nginx 与 Ribbon 区别
Nginx 属于服务端负载均衡,Ribbon 属于客户端负载均衡。Nginx 作用与 Tomcat,Ribbon 作用
与各个服务之间的调用 (RPC)。消息队列
作用: 解耦业务, 异步化处理数据
Kafka
RabbitMQ
RocketMQ
activeMQ
日志采集 (elk)
作用: 收集各服务日志提供日志分析、用户画像等
Elasticsearch
Logstash
Kibana
API 网关
作用: 外部请求通过 API 网关进行拦截处理, 再转发到真正的服务
Zuul
Zuul is a gateway service that provides dynamic routing, monitoring, resiliency, security,
and more.
服务监控
作用: 以可视化或非可视化的形式展示出各个服务的运行情况 (CPU、内存、访问量等)
ZabbixNagios
Metrics
服务链路追踪
作用: 明确服务之间的调用关系
Zipkin
Brave
数据存储
作用: 存储数据
关系型数据库
MySql
Oracle
MsSQL
PostgreSql
非关系型数据库
Mongodb
Elasticsearch
缓存
作用: 存储数据
redis分库分表
作用: 数据库分库分表方案.
ShardingSphere
Mycat
服务部署
作用: 将项目快速部署、上线、持续集成.
Docker
Jenkins
Kubernetes(K8s)
Mesos
微服务治理策略
Author: HuiFer
Description: 该文简单介绍微服务的治理策略以及应用技术
服务的注册和发现
解决问题: 集中管理服务
解决方法: eureka 、zookeeper
负载均衡
解决问题: 降低服务器硬件压力
解决方法: nginx 、 Ribbon通讯
解决问题: 各个服务之间的沟通桥梁
解决方法 :
同步消息
-
rest
-
rpc
异步消息
- MQ
配置管理
解决问题: 随着服务的增加配置也在增加, 如何管理各个服务的配置
解决方法: nacos 、 spring cloud config 、 Apollo
容错和服务降级
解决问题: 在微服务当中,一个请求经常会涉及到调用几个服务,如果其中某个服务
不可以,没有做服务容错的话,极有可能会造成一连串的服务不可用,这就是雪崩效
应.
解决方法: hystrix
服务依赖关系
解决问题: 多个服务之间来回依赖, 启动关系的不明确
解决方法:
- 应用分层: 数据层, 业务层 数据层不需要依赖业务层, 业务层依赖数据, 规定上下依赖关系
避免循环圈服务文档
解决问题: 降低沟通成本
解决方法: swagger 、 java doc
服务安全问题
解决问题: 敏感数据的安全性
解决方法: oauth 、 shiro 、 spring security
流量控制
解决问题: 避免一个服务上的流量过大拖垮整个服务体系
解决方法: Hystrix
自动化测试
解决问题: 提前预知异常, 确定服务是否可用
解决方法: junit
服务上线, 下线的流程
解决问题: 避免服务随意的上线下线
解决方法: 新服务上线需要经过管理人员审核. 服务下线需要告知各个调用方进行修改,
直到没有调用该服务才可以进行下线.
兼容性解决问题: 服务开发持续进行如何做到兼容
解决方法: 通过版本号的形式进行管理, 修改完成进行回归测试
服务编排
解决问题: 解决服务依赖问题的一种方式
解决方法: docker & k8s
资源调度
解决问题: 每个服务的资源占用量不同, 如何分配
解决方法: JVM 隔离、classload 隔离 ; 硬件隔离
容量规划
解决问题: 随着时间增长, 调用逐步增加, 什么时候追加机器
解决方法: 统计每日调用量和响应时间, 根据机器情况设置阈值, 超过阈值就可以追加
机器