微服务基础

目录

一、介绍

1.1 介绍

二、微服务基础介绍

2.1 微服务基础介绍

三、微服务的基本概念

3.1 什么是微服务

3.2 微服务的特点

3.3 微服务的优缺点

3.4 微服务的两大门派

通信协议对比

文档质量对比

如何选型比喻:

四、微服务的拆分、扩展和重要模块

4.1 微服务的拆分

4.2 服务扩展

 自动按需扩展:

4.3 微服务重要模块

五、总结


一、介绍

1.1 介绍

        微服务的基本概念、设计与拆分原则

        微服务和Spring Cloud的关系

        微服务常见的组件和功能

        课程查询案例基本介绍、系统架构设计和接口设计

        分模块构建Spring Cloud项目

        完成课程列表、课程价格服务开发

        课程服务整合,服务注册与发现

        整合Feign实现服务间调用

        网关的集成与开发,并接入服务

        引入服务的熔断与降级,并进行实操演练        

二、微服务基础介绍

2.1 微服务基础介绍

        什么是微服务

        微服务的特点

        微服务优缺点

        微服务的两大门派:springcloud、dubbo

        微服务拆分

        微服务扩展

        微服务重要模块:服务注册与发现、微服务之间的通信、负载均衡、网关等等

三、微服务的基本概念

3.1 什么是微服务

微服务热度:

        2016年以后微服务的百度搜索指数开始快速增加。

单体应用的痛点:

        一大流派:LAMP Linux Apache Mysql PHP

        另一流派:Spring Tomcat

        部署效率低下:单体代码多、依赖越来越多、Pom有几十个依赖

        团队协作开发成本高

        系统可用性差:运行在一个进程中,部分代码出问题,会影响全部代码运行

什么是服务化:

        把传统的单机应用中的本地方法调用,改造成通过RPC、HTTP产生的远程方法调用

        把模块从单体应用中拆分出来,独立成一个服务部署

        用户模块就可以独立开发、测试、上线和运维,可以交由专门的团队来做,与主模块不耦合

什么是微服务:

        一种架构风格

        开发单个应用作为一系列小型服务的套件,其中每个服务都运行在自己的进程中,并且通过轻量级的机制实现彼此间的通信,这通常是HTTP资源API

        这些服务是围绕着业务功能构建的,并且可以通过完全自动化的部署机制进行独立部署

        这些服务的集中式管理做到了最小化(例如docker相关技术),每一种服务都可以通过不同的编写语言进行编写,并且可以使用不同的数据存储技术

3.2 微服务的特点

        组件以服务形式来提供(需要明确组件之间的接口和通信协议)

        产品不是项目

        轻量级通信(RPC、HTTP、RabbitMQ)、独立进程

        分散治理、去中心化治理(要有报警机制监控手段)

        容错性设计

        会带来团队组织架构的调整

3.3 微服务的优缺点

        服务简单、便于学习和上手,相对易于维护

        独立部署、灵活扩展

        技术栈丰富

        运维成本过高

        接口可能不匹配

        代码可能重复

        架构复杂度提高

3.4 微服务的两大门派

Spring Cloud:

        众多子项目,网关、配置中心、服务注册与发现、断路器、智能路由、全局锁等等。只要我们有需要,对Spring Cloud而言,都会有一个相对成熟的解决方案。Spring Cloud并没有重复的造轮子,它的这些组件都是选自各个公司开发成熟的,经过实际考验的服务框架。

Dubbo:

        高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

        dubbo提供的能力只是Spring Cloud的一部分子集。

         Dubbo表格中的无,并不是无法实现。只是说Dubbo不提供,可以和其他框架和组件进行整合。分布式配置可以采用:百度的disconf、淘宝的diamond;服务跟踪可以采用:京东开源的Hydra;批量任务可以采用:当当开源的Elastic-Job;

通信协议对比

RPC vs REST

        服务提供方与调用方接口依赖方式太强

        服务对平台(语言)敏感,难以简单复用

文档质量对比

        Dubbo的文档可以说在国内开源框架中算是一流的,提供了中文与英文两种版本

        Spring Cloud文档体量大,更多的是偏向整合,更深入的使用方法还是需要查看其整合组件的详细文档

如何选型比喻:

        Dubbo:组装电脑,自由度高,但有兼容性风险和挑战。

        Spring Cloud:品牌机,自由度低,但经过兼容性考验。

        需要根据自身的研发水平和所处阶段选择

四、微服务的拆分、扩展和重要模块

4.1 微服务的拆分

什么时候进行服务化拆分:

        第一阶段的主要目标是快速开发和验证想法。并不是搭建庞大的高可用高并发的系统。我们需要证明这个产品的思路是否可行。第一阶段把所有功能都打包在一起,集中的进行开发 测试和运维,这是最高效,最节省成本的方式。

        进一步增加更多的新特性来吸引更多的目标用户。

        同时进行开发的人员超过10人,这个时候就该考虑进行服务化拆分了。

不适合拆分的情况:

        小团队,技术基础较薄弱

        流量不高,压力小,业务变化也不大

        对延迟很敏感的低延迟高并发系统

服务化拆分的两种姿势:

         纵向拆分:按业务维度拆分

        横向拆分:公共模块

        结合业务综合分析:

4.2 服务扩展

 自动按需扩展:

        根据CPU负载程度、特定时间(比如周末)、消息中间件的队列长度、业务具体规则、预测等 来决定是否扩展

        自动分配一个新的服务实例,提高可用性

        提高了可伸缩性(双11之后,自动减少服务器)

        具有最佳使用率,节约成本

        建立在模块拆分、数据库分表基础之上做到的

4.3 微服务重要模块

以一次基本的正常服务调用为例,来看看有哪些模块是非常重要的:

        服务描述(http服务还是其他服务?接口样子、返回内容)

        注册中心

        服务框架(采用什么协议,同异步传输,单链接多路复用,数据压缩格式,提高网络利用率,JSON序列化Java对象序列化)

        负载均衡

        熔断与降级

        网关(进行 统一转换,权限校验,过滤器设置)

五、总结

你可能感兴趣的:(Java工程师技术栈,微服务)