java架构设计理解(一)

news/2024/7/5 4:36:08

个人学习资源免费分享网站:http://xiaocaoshare.com/

1.关于单机架构、集群架构、分布式架构理解:

单机架构:所有的代码都写在一个项目中,项目部署在一台服务器上

集群架构:就是单机复制几份,一起组成的就是集群。集群中每台服务器就叫做这个集群的一个节点,所有节点构成了一个集群。                    每个节点都提供相同的服务

集群的好处:系统易于扩展。但是,当业务发展到一定程度的时候,会产生一个问题——无论怎么增加节点,整个集群性能的提升效果并不明显了。这时候,就需要使用微服务结构了

负载均衡服务器作用:主要解决用户的请求,交给哪个节点进行处理。(最好交给负载较小的节点进行处理)

负载均衡策略:

1)轮询(默认)

缺点:不会考虑到每台服务器的处理能力

2)权重

 注意 权重这种策略是根据权重的比例进行负载,是这样的一个概率,而不是百分百按比例分配。

优点:考虑了每台服务器处理能力的不同,用的最多.

3)ip_hash

优点:能实现同一个用户访问同一个服务器,解决了分布式session问题
缺点:ip hash 负载均衡也是不平均的,可能不会起到很好的效果。

4)url hash(第三方:需要配第三方插件)

优点:能实现同一个服务(url)访问同一个服务器
缺点:分配请求不平均,起不到负载均衡的功能,还是一个url会有大量流量.

5)fair(第三方)

优点:根据后端服务器的响应时间分布请求,响应时间短的优先分配

分布式架构:将一个完整的系统,按照业务功能,拆分成一个个独立的子系统。在分布式结构中,每个子系统就被称为“服务”。这些子系统能够独立运行在web容器中,它们之间通过RPC方式通信。

从单机结构到集群结构,业务代码基本不需要作任何修改,工程师要做的仅仅是多部署几台服务器,每台服务器上运行相同的代码就行了。但是,从集群结构演进到微服务结构,之前的那套代码就需要发生较大的改动。所以对于新系统,系统设计之初就采用微服务架构,这样后期运维的成本更低。但如果一套老系统需要升级成微服务结构的话,那就得对代码大动干戈了。所以,对于老系统而言,究竟是继续保持集群模式,还是升级成微服务架构,这需要架构师深思熟虑、权衡投入产出比。

分布式架构的特点:

  • 系统之间的耦合度大大降低,可以独立开发、独立部署、独立测试,系统与系统之间的边界非常明确,排错也变得相当容易,开发效率大大提升。
  • 系统之间的耦合度降低,从而系统更易于扩展,可以针对性地扩展某些服务。假设这个商城要搞一次大促,下单量可能会大大提升,因此可以针对性地提升订单系统、产品系统的节点数量,而对于后台管理系统、数据分析系统而言,节点数量维持原有水平即可。
  • 服务的复用性更高。比如,将用户系统作为单独的服务后,该公司所有的产品都可以使用该系统作为用户系统,无需重复开发

区别联系:

1)集群主要的使用场景是为了分担请求的压力,分布式的应用场景是单台机器已经无法满足性能的要求

2)分布式是指多个系统协同合作完成一个特定任务的系统。分布式的主要工作是分解任务,将职能拆解

3)集群主要是简单加机器解决问题,对于问题本身不做任何分解

 

将一套系统拆分成不同子系统部署在不同服务器上,这叫分布式
然后部署多个相同的子系统在不同的服务器上,这叫集群
部署在不同服务器上的同一个子系统,叫做负载均衡

分布式和微服务的区别:

微服务是架构设计方式,分布式是系统部署方式

微服务的设计是为了不因为某个模块的升级和BUG影响现有的系统业务。微服务与分布式的细微差别是,微服务的应用不一定是分散在多个服务器上,他也可以是同一个服务器。

分布式属于微服务

 

2.微服务、SpringBoot区别和联系

微服务就是将一个系统按照功能模块进行划分,每个功能独立打包部署在web容器里面,每个功能成为一个服务,服务直接使用SpringCloud或Dubbo远程调用协议进行服务间调用

springboot是一个快速搭建应用的框架,不是微服务

3.分布式事务和分布式锁

分布式事务:当遇到复杂业务调用时,可能会出现跨库多资源(一个事务管理器,多个资源)/多服务调用(多个事务管理器,多个资源),期望全部成功或失败回滚,这就是分布式事务,用以保证“操作多个隔离资源的数据一致性”。

分布式锁:

 


http://lihuaxi.xjx100.cn/news/244323.html

相关文章

(原)使用mkl计算特征值和特征向量

转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5585271.html 参考文档:mkl官方文档 lapack_int LAPACKE_sgeev(int matrix_layout, char jobvl, char jobvr, lapack_int n, float* a, lapack_int lda, float* wr, float* wi, float* vl, lapac…

阿里巴巴开源的 Blink 实时计算框架真香

Blink 开源了有一段时间了,竟然没发现有人写相关的博客,其实我已经在我的知识星球里开始写了,今天来看看 Blink 为什么香? 我们先看看 Blink 黑色版本: 对比下 Flink 版本你就知道黑色版本多好看了。 你上传 jar 包的时…

Linux字符设备驱动程序的框架(新写法)

这是老版本内核的的Linux驱动注册函数写法: major register_chrdev(0, "hello", &hello_fops); /* (major, 0), (major, 1), ..., (major, 255)都对应hello_fops */ 新版本内核Linux驱动注册函数写法#define MAJOR(devid) ((unsigned int) ((devid…

【206】Firefox 扩展收集

Stylish NoSquint转载于:https://www.cnblogs.com/alex-bn-lee/p/5586159.html

java中锁的介绍及运用

个人免费资源分享网站:http://xiaocaoshare.com/ 1.悲观锁和乐观锁 对于同一个数据的并发操作,悲观锁认为自己在使用数据的时候一定有别的线程来修改数据,因此在获取数据的时候会先加锁,确保数据不会被别的线程修改。Java中&…

12 Java面向对象之多态

JavaSE 基础之十二12 Java面向对象之多态 ① 多态的概念及分类 多态的概念:对象的多种表现形式和能力多态的分类  1. 静态多态:在编译期间,程序就能决定调用哪个方法。方法的重载就表现出了静态多态。  2. 动态多态:在程序运行…

蓝懿教育九月二十七日记录

将VIew移动做成动画效果 这种动画效果没有中间的位移可以添加动画的View属性center,frame,alpha,transform , backgroundColor//继续做消失的动画[UIView animateWithDuration:1 animations:^{iv.alpha 0;} completion:^(BOOL finished) …

array_multisort

function sorting_by_sale($arrUsers, $direction"desc"){if(empty($arrUsers)){return $arrUsers;}$direArr array("desc">SORT_DESC, asc>"SORT_ASC");$sort array( direction > $direArr[$direction], //排序顺序标志 SORT_DESC …