微服务架构的风格,就是将单一程序开发成一个微服务,每个微服务运行在自己的进程中,并使用轻 量级机制通信,通常是 HTTP RESTFUL API。这些服务围绕业务能力来划分构建的,并通过完全自动化部署机制来 独立部署。 这些服务可以使用不同的编程语言,以及不同数据存储技术,以保证最低限度的集中式管理。
随着互联网发展的越来越庞大,我们的系统,项目随之越发庞大,从最初的单体应用到前后端分离,然后到现如今比较火热的微服务。微服务开发对技术人员要求更高。每个或没几个技术人员专注开发自己的业务(自己的服务),确保服务的高可用。
目录
系统的演变
单体服务
前后端分离
微服务架构
微服务的划分
通常划分微服务时,会已业务进行划分
- 第一部分是基础服务,跟业务关系不大,提供一些基础的服务,如用户中心,订单信息等。
- 第二部门是支持服务,例如一些第三方的东西,比如短信,支付网关,可能跟业务没有直接关系,但是对我的业务起到一定的支撑作用。
- 第三部门就是核心业务服务,例如用户端,管理端,审批审计端等等。
技术选型
在我看来,技术选型跟平时买东西大差不差,销量高的大众认可的就是好东西,技术也是一样。
列举几个常用的。docker、springboot、spirngcloud alibaba、rabbitmq、rocketmq、redis、canel等等。
常见的问题以及解决方案
微服务之间调用大多都采用http方式进行交互,问题随之而来,例如网络延迟造成的重复提交,服务之间的事物(你那儿成功了我这儿没成功),数据的不一致性。等等
- 重复提交:消息中添加唯一id,对消息id进行判断。
- 分布式事务:比较常见的分布式事务解决方案一般都采用base理论所讲的,弱一致性。强调的是不一定立刻都一致,但是一定会一致。中间可能等待一段时间。例如:银行转帐。手机银行转账都有个5 4 3 2 1倒数。比较常见的(本地方法表,消息队列等等)
推荐阅读
前后端分离 springboot shiro+jwt token认证 权限校验_Fighter-CSDN博客项目源码GitHub - dugt-1998/springboot-shiro-jwt: 杜国涛的仓库杜国涛的仓库. Contribute to dugt-1998/springboot-shiro-jwt development by creating an account on GitHub.https://github.com/dugt-1998/springboot-shiro-jwt核心部分shiro最核心的亮点无非认证加授权首先定义我们的配置类/** * <...https://blog.csdn.net/weixin_44912855/article/details/121319260?spm=1001.2014.3001.5501redis实现分布式限流 结合Lua脚本_Fighter-CSDN博客通过 AOP 结合 Redis + Lua 脚本实现分布式限流,旨在保护 API 被恶意频繁访问的问题自定义注解@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface RateLimiter { long DEFAULT_REQUEST = 10; /** * max 最大请求数 */ @AliasFor("max").
https://blog.csdn.net/weixin_44912855/article/details/120667603?spm=1001.2014.3001.5501Java 保证接口的幂等性 接口唯一性 避免重复提交_Fighter-CSDN博客举栗子:当网络延迟的情况下,用户多次点击,多条数据插入到数据库,或者造成数据的不一致性,如提交订单,扣钱等。简述一下前端解决思考 :按钮只让用户点击一次,重定向至友好页面,避免多次点击,此文主要介绍我的一些Java解决的思路及方法。直接上我所能想到的解决方法,就拿我所属的电商行业举例乐观锁机制用户下订单,下订单,就会走保存订单的接口,此时,就根据用户的id去查它积分的version的值,如1支付时,带着version的值去更新,版本号匹配则更新,版本号不匹配则不更新,上代码sele
https://blog.csdn.net/weixin_44912855/article/details/115015263?spm=1001.2014.3001.5502聊聊RabbitMQ RabbitMQ相关面试题_Fighter-CSDN博客目录为什么要使用消息队列消息队列的缺点各大消息队列的优缺点如何保证RabbitMQ的高可用如何保证消息的幂等性如何保证消息不被丢失如何保证消息的顺序性为什么要使用消息队列目前我所在的公司是一家电商医药,是一款电商小程序,我们订单的模块就用到了RabbitMQ,那为什么我们要使用RabbitMQ呢?无需担心订单接口是否异常,用户下订单直接把订单发送到消息队列去,返回下单成功,订单接口订阅消息队列,消费消息,保存订单~ 解耦:多个系统(B,C,...
https://blog.csdn.net/weixin_44912855/article/details/114437624?spm=1001.2014.3001.5502