微服务实战 之 基础部分

什么是微服务?

简单来说:微服务是一种设计风格,它是将原来的单体系统进行拆分,这些小型的服务运行在相相互独立的进程中,他们之间通过HTTP 或者 restful API进行通信协作。被拆分成的每一个小部分的服务应用都围绕着整个系统中的耦合度较高的部分来进行构建,而且每一个微服务都维护者自己的数据存储,业务开发,自动化测试案例以及独立的部署机制。

由于存在着轻量级的通信协议做基础,各个部分可以使用不同的语言来做开发。

 

如何实施微服务?

微服务虽然存在着许多的优点,但是也存在着服务拆分引发的原本在单体应用中不存在的问题。

  • 运维的新挑战;
  • 接口的一致性:虽然我们拆分了服务,但是业务逻辑上的依赖不会消除,只是从业务上的依赖变味了服务上的依赖。 我们需要更完善的接口和版本管理,或是严格的遵循关闭原则。
  • 分布式的复杂性:网络延迟、异步消息、分布式事务等

微服务框架存在的优点:敏捷开发、自动化部署等优点。

 

微服务架构的九大特性:

服务组件化

每个服务都可以独立的升级而不影响其他组件的运行。服务之间通过HTTP等协议来进行通信,不像传统的组件那样嵌入式的进行调用。每一个服务都可以独立部署,避免一个服务的部署引起整个项目的重新部署。

按业务组织团队划分

由于每一块服务都是独立的一个整体,如果还是按照以往的前端后端来笼统的来划分团队,具体的业务还是难以明朗。可以将团队按照业务线来进行划分

做产品的态度

以做产品的态度来对待每一个微服务,持续关注服务的运作情况,不断的分析用户来改善业务功能。

智能端点与哑管道

如果仅仅将原来进程间的方法调用改为RPC方法调用,会导致微服务之间繁琐的消息通信,使得系统的表现更糟,需要更加粗粒度的消息通信。

使用HTTP轻量级的消息通信来完成消息传递和服务调用

通过在轻量级的消息总线上传递消息 例如 RabbitMQ提供可靠异步交换的中间件。

去中心化治理

针对不同的业务特点使用不同的技术平台。

数据去中心化

将服务拆分后,由服务来管理与自己相关的数据信息,(将原本存储在Mysql中的表拆分后存储在不同的mysql实例。或者将用户登录的日志信息保存在redis,将日志信息保存在mongodb)。

在达到数据信息的去中心化之后,数据的一致性也成为微服务架构中亟待解决的问题之一,分布式的事务本来就很麻烦。所以在微服务之间我们更加强调各服务之间“无事务”的调用,而数据的一致性只要求数据在最终是一致的,若在过程中出现错误则通过补偿机制来完成,使得错误的数据能够达到最终一致。

基础设施自动化

云计算和容器技术不断的成熟。

自动化测试

自动化部署

容错设计

在微服务中由于各个服务之间是在独立的进程中,会出现某些组件出现问题的情况。

服务B调用服务A,而此时A出现了问题,B调用A而没有返回结果,当等待到超时之后线程才释放。

若果B调用A是由于C触发的,C频发的调用B,而B又依赖A,大量的线程被挂起,导致C也不能正常的工作,这就是故障的蔓延。

所以需要快速的检测出故障的源头,既可能的自动恢复是必须要考虑的。通常我们需要在每一个组件中实现监控和日志记录的组件,例如服务状态,断路器状态,网络延迟,吞吐量等。

演进式设计

从刚开始的单体应用开始不断的进行扩展和演进,直接开始微服务的设计需要设计构建成本过高。随着时间的发展,将一些不断变动的模块拆分出来形成一个单独的应用。

 

为什么选择SpringCloud?

目前出现的多种关于微服务治理的方案存在很多。例如关于服务发现的有 alibaba的Dubbo 当当网在此基础上做出的改进 DubboX Spring Cloud Eureka 。。。。

这么多的技术都是前辈们在解决微服务的缺点时 结合自身业务的解决方案 这势必会在做技术选型初期 需要花费大量的时间来做调研,分析。SpringCloud的出现 不是前面出现的只解决某一方面的问题,他是一个解决微服务架构实施的综合性的框架整合了诸多被证明的组件作为实施的基本组件,又在此基础上创建了一些优秀的边缘组件。

 

SpringCloud的简介:

SpringCloud是一个基于SpringBoot实现的微服务架构开发工具,他为微服务架构中涉及到的配置管理,服务治理,断路器,智能路由,微代理,控制总线,全局锁,决策竞选,分布式会话,集群状态管理。

包含的子项目:

Spring Cloud Config : 配置管理工具 支持Git存储配置内容 实现了应用配置的外部化存储

Spring Cloud Netflix:核心组件

Eureka:服务治理组件 注册中心 服务注册发现

Hystrix : 容错管理组件 实现断路器模式 提供强大的容错能力。

Ribbon: 客户端负载均衡的服务调用组件

Feign: 基于Hystrix 和 Ribbon 的声明式服务调用组件

Zuul:网关组件 提供智能路由 访问过滤等功能。

Archaius : 外部配置化组件

Spring Cloud Bus:事件 消息总线。用来传播集群中的状态变化或者事件,例如动态的刷新配置等

Spring Cloud Cluster:针对Zookeeper redis 的选举算法和通用状态的实现,

......

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值