一、微服务入门与Nacos注册中心

430 阅读4分钟

一、微服务入门


1、单体应用

一个软件应用对应一个归档包(jar包或war包),并且这个war包包含了该工程的所有功能

单体应用的BS架构如下:

当用户访问量变大导致一台服务器无法支撑时,可通过增加服务器的数量并配置对应的负载均衡策略,演变成如下架构:

为了提升访问速度,把静态文件独立出来,通过CDN等手段进行加速,可以提升应用的整体响应速度,演变成如下架构:

单体应用的优点:

  • 架构简单明了,没有花里胡哨的问题需要解决
  • 开发、测试、部署简单

单体应用的缺点:

  • 随着业务扩展,代码越来越复杂,代码质量参差不齐
  • 应用启动时间长,部署慢
  • 回归测试周期长,修复一个小小bug可能都需要对所有关键业务进行回归测试
  • 应用容错性差,某个小小功能的程序错误可能导致整个系统宕机
  • 扩展成本高,单体应用扩展性能时只能对整个应用进行扩展,造成资源浪费
  • 开发协作困难,一个大型应用系统,可能几十个甚至上百个开发人员,大家都在维护一套代码,代码merge复杂度增加

2、微服务应用

微服务核心就是把传统的单体应用,根据业务将单体应用拆分为一个一个的,每一个服务都能提供特定的功能,一个服务只做一件事,每个服务都能够单独部署,甚至可以拥有自己的数据库,这样的一个一个的小服务就是微服务

微服务应用的特点:

  • 单一职责的,一个微服务应该都是单一职责的,这才是“微”的体现,一个微服务解决一个业务问题
  • 面向服务的,将自己的业务能力封装并对外提供服务,这是继承SOA的核心思想,一个微服务本身也有可能使用到其它微服务的能力

微服务应用的优点:

  • 每个服务足够小,足够内聚,代码更加容易理解,专注一个业务功能点
  • 开发简单,一个服务只干一件事情
  • 微服务能够被2-5个人的小团队开发,提升效率
  • 伸缩性好,可以按需伸缩(扩展性能)
  • 前后端分离,作为java程序员,只需关注后端接口的安全性及性能
  • 一个服务可以拥有自己的数据库,也可以多个服务连接同一个数据库

微服务应用的缺点:

  • 增加了运维人员的工作量,可能需要部署成百上千个小的服务
  • 服务之间相互调用,增加通信成本
  • 数据一致性问题(分布式事务问题)
  • 性能监控、问题定位等问题

参考文档(英文) 参考文档(中文)

3、微服务架构

微服务架构是一种架构风格,提倡将一个单一的应用程序开发为一组小的服务,每个服务运行在自己的进程中,服务之间通过轻量级的通信机制(http rest api)进行通信,每个服务都能独立部署,每个服务都可以拥有自己的数据库

微服务以及微服务架构是两个完全不同的概念,微服务强调的是服务的大小和对外提供的单一功能,而微服务架构是指把一个一个的微服务组合管理起来,对外提供一套完整的服务。

微服务架构的核心是为了解决应用微服务化之后的服务治理问题。

二、Spring Cloud Alibaba入门


1、Spring Cloud

Spring Cloud是程序员用来开发微服务的一整套技术解决方案,包含服务注册与发现、服务容错与降级、服务网关、服务调用、负载均衡等

参考文档

2、Spring Cloud Alibaba

Spring Cloud Alibaba是Spring Cloud的一个子项目,提供了微服务开发的一站式解决方案,包含了微服务开发的必要组件

参考文档