Linux-【单体架构/分布式架构】
✨博客主页: https://blog.csdn.net/m0_63815035?type=blog
💗《博客内容》:.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识
📢博客专栏: https://blog.csdn.net/m0_63815035/category_11954877.html
📢欢迎点赞 👍 收藏 ⭐留言 📝
📢本文为学习笔记资料,如有侵权,请联系我删除,疏漏之处还请指正🙉
📢大厦之成,非一木之材也;大海之阔,非一流之归也✨
目录
- 一、单体架构
- 1.1单体架构的定义和特点
- 1.2单体架构的部署
- 1.3服务器和数据中心介绍
- 二、垂直架构与分布式架构
- 2.1垂直架构(门户系统展示)
- 2.2垂直架构面临的问题和挑战
- 2.3分布式锁的必要性
- 2.4分布式锁的实现方式
- 2.5外部加锁的实现
- 2.6乐观锁的实现原理
- 2.7ABA问题的解决
- 三、微服务架构
- 3.1微服务架构概述
- 3.2微服务架构举例
- 3.3 微服务架构的特点
- 3.4微服务架构的挑战
- 3.5微服务架构的优缺点
- 3.6微服务架构的技术栈
- 3.7虚拟化技术与容器化技术
- 3.8微服务架构的生态图
- 3.9CI/CD流程在微服务架构中的应用
一、单体架构
1.1单体架构的定义和特点
1.单体架构定义:整个项目所有功能都写在一个包中。
2.单体架构特点:架构简单、开发简单、部署简单。
3.单体架构示例:小型管理系统等项目采用单体架构。
缺点:
1.代码重构难:所有代码在一个项目中,修改代码可能影响整个系统。
2.代码史删:项目代码冗余,工具类代码重复。
3.项目升级周期长:项目包大,上传和部署时间长,不适合敏捷开发。
1.2单体架构的部署
1.部署方式:将项目打包成WAR包,部署在Tomcat服务器或Spring Boot内置的Tomcat中。
2.服务器访问:通过IP地址和端口访问部署在服务器上的项目。
3.异地多活:通过在多个数据中心部署服务器,提高系统的可用性。
1.3服务器和数据中心介绍
1.服务器定义:包含CPU、内存和硬盘的计算设备。
2.数据中心定义:互联网数据中心(IDC),包含多个机架和服务器。
3.机架定义:用于安装服务器的设备,包含多个硬盘。
4.上云趋势:中小型公司倾向于使用云服务器,降低运维成本。
二、垂直架构与分布式架构
概念:
垂直架构:通过将项目拆分为多个服务,实现分布式部署。
分布式架构:通过多个服务器共同完成一个任务,提高系统性能和可扩展性。
集群:是指多个服务器做相同的事情,提供分散的压力,单个业务处理时间没有缩短。
分布式:是指多个服务器共同完成一件事,提高业务处理速度。大型公司倾向于同时采用集群和分布式技术(垂直),以应对高并发和业务需求。
2.1垂直架构(门户系统展示)
1.垂直架构是分布式架构的一种形式。
2.垂直领域是指纯粹的领域,没有其他内容干扰。
3.京东商城可以按照垂直领域进行划分,分为门户系统、商户系统和物流系统。
1.优点:架构简单,压力分散,代码安全,技术选型多。
2.缺点:程序员要求高,技术难点多,如分布式事务和锁的问题。
2.2垂直架构面临的问题和挑战
1.垂直架构面临数据库一致性问题。
2.多个数据库需要处理数据一致性,避免数据冲突。
3.分布式事务和两阶段提交等技术用于解决数据一致性问题。
2.3分布式锁的必要性
1.抢红包功能示例,说明在并发情况下,未加锁的代码会导致优惠券被重复抢夺。
2.加锁的必要性,通过synchronized等同步机制解决并发问题。
2.4分布式锁的实现方式
1.代码同步化:通过synchronized等机制实现代码的同步访问。
2.乐观锁:通过比较并交换(CS)机制,无锁思想,通过版本号解决ABA问题。
2.5外部加锁的实现
1.在外部加锁,使用多进程可见的组件,如ZooKeeper。
2.ZooKeeper的实现原理,满足多进程可见、高可用、互斥性等要求。
2.6乐观锁的实现原理
1.乐观锁的定义,通过版本号解决ABA问题。
2.CAS操作,比较并交换,通过版本号确保数据的一致性。
2.7ABA问题的解决
1.ABA问题的定义,数据被修改后恢复原值。
2.通过版本号解决ABA问题,确保数据的一致性。
三、微服务架构
3.1微服务架构概述
1.微服务架构是将项目功能拆分为多个独立的服务进行开发。
2.每个服务都独立部署、扩展和管理。
3.微服务架构的两大版本:面向服务架构(SOA)和微服务架构。
3.2微服务架构举例
1.以京东商城为例,每个功能模块都作为一个独立的服务开发。
2.服务包括用户模块、搜索模块、购物车模块、订单模块、支付模块等。
3.每个服务都有独立的IP地址和端口。
3.3 微服务架构的特点
1.服务细粒度:每个功能都是一个独立的服务。
2.独立性:服务独立部署、扩展和管理。
3.可伸缩性:每个服务可以独立扩容。
3.4微服务架构的挑战
1.服务器成本:微服务架构需要大量的服务器,增加成本。
2.资源利用:虚拟机和容器技术用于充分利资源。
3.测试复杂性:微服务架构测试困难,需要测试每个服务的交互流程。
3.5微服务架构的优缺点
1.优点:代码分散、代码安全、开发简单。
2.缺点:架构复杂、测试困难、技术要求高。
3.6微服务架构的技术栈
1.客户端:APP、小程序、PC、物联网。
2.DNS域名解析:将域名解析为IP地址。
3.防火墙:检查请求合法性。
4.网关:处理请求路由、身份验证。
5.注册中心:服务发现与注册。
6.服务网关:转发请求、身份验证。
7.负载均衡:分发请求。
8.熔断限流降级:保护服务。
9.数据层:关系数据库、缓存、搜索引擎、MongoDB。
10.日志框架:ELK(Elasticsearch、Logstash、Kibana)。
11.链路追踪:Zipkin或SkyWalking。
12.定时任务:XXL-JOB或Spring Batch。
13.配置中心:Spring Cloud Config或Apollo。
14.监控中心:Prometheus、Grafana。
3.7虚拟化技术与容器化技术
1.虚拟机:重虚拟化,整个操作系统虚拟化。
2.容器化:轻虚拟化,细粒度虚拟化,只包含所需资源。
3.容器技术:Docker,用于创建和运行容器。
4.虚拟化管理:Kubernetes,用于容器项目的发布上线。
3.8微服务架构的生态图
1.客户端:APP、PC、物联网。
2.DNS域名解析。
3.防火墙。
4.网关:Spring Cloud Gateway或Nginx。
5.注册中心:Eureka、Zookeeper或Nacos。
6.监控中心:Prometheus、Grafana。
7.日志框架:ELK。
8.链路追踪:Zipkin或SkyWalking。
9.配置中心:Spring Cloud Config或Apollo。
10.定时任务:XXL-JOB或Spring Batch。
11.数据层:关系数据库、缓存、搜索引擎、MongoDB。
12.开发运维工具:Maven私服、GitLab。
13.容器管理:Docker、Kubernetes。
3.9CI/CD流程在微服务架构中的应用
1.自动化测试:通过CI/CD流程进行自动化测试。
2.持续集成:自动构建、测试代码变更。
3.持续交付:将代码变更交付到测试环境或生产环境。
今天这篇文章就到这里了,大厦之成,非一木之材也;大海之阔,非一流之归也。感谢大家观看本文