软件架构演进

传统架构到分布式架构详解 

软件架构演进
软件架构的发展经历了从单体架构、垂直架构、SOA架构到微服务架构的过程,博客里写到了这四种架构的特点以及优缺点分析,个人学习之用,仅供参考!

1.1.1 单体架构

特点:
1、所有的功能集成在一个项目工程中。
2、所有的功能打一个war包部署到服务器。
3、应用与数据库分开部署。
4、通过部署应用集群和数据库集群来提高系统的性能。

优点:
1、项目架构简单,前期开发成本低,周期短,小型项目的首选。

缺点:
1、全部功能集成在一个工程中,对于大型项目不易开发、扩展及维护。
2、系统性能扩展只能通过扩展集群结点,成本高、有瓶颈。
3、技术栈受限。

1.1.2 垂直架构

特点
当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。
此时,用于加速前端页面开发的 Web框架(MVC) 是关键。

优点:
1、项目架构简单,前期开发成本低,周期短,小型项目的首选。
2、通过垂直拆分,原来的单体项目不至于无限扩大。
3、不同的项目可采用不同的技术。

缺点:
1、全部功能集成在一个工程中,对于大型项目不易开发、扩展及维护。
2、系统性能扩展只能通过扩展集群结点,成本高、有瓶颈。

1.1.3 SOA架构

面向服务架构,如dubbo

优点:
把模块拆分,使用接口通信,降低模块之间的耦合度
把项目拆分成若干个子项目,不同的团队负责不同的子项目
增加功能时只需要在增加一个子项目,调用其它系统的接口就可以
可以灵活的进行分布式部署

缺点:
系统之间交互需要使用远程通信,接口开发增加工作量

1.1.4 微服务架构

特点:
1、将系统服务层完全独立出来,并将服务层抽取为一个一个的微服务。
2、微服务遵循单一原则。
3、微服务之间采用RESTful等轻量协议传输。

优点:
1、服务拆分粒度更细,有利于资源重复利用,提高开发效率。
2、可以更加精准的制定每个服务的优化方案,提高系统可维护性。
3、微服务架构采用去中心化思想,服务之间采用RESTful等轻量协议通信,相比ESB更轻量。
4、适用于互联网时代,产品迭代周期更短。

缺点:
1、微服务过多,服务治理成本高,不利于系统维护。
2、分布式系统开发的技术成本高(容错、分布式事务等),对团队挑战大。

要解决的技术难点:
1、这么多服务,怎么找?
通过zookeeper做服务注册信息的分布式管理。当服务上线时,服务提供者将自己的服务信息注册到ZK,并通过心跳维持长链接,实时更新链接信息。服务调用者通过ZK寻址,根据可定制算法,找到一个服务,还可以将服务信息缓存在本地以提高性能。当服务下线时,ZK会发通知给服务客户端。 
               
主流的注册中心:zookeeper、Eureka、consul、etcd

2、服务之间如何通信?
因为所有的微服务都是独立的Java进程跑在独立的虚拟机上,所以服务间的通信就是IPC(inter process communication),已经有很多成熟的方案。比如基于HTTP的REST或者Thrift

3、这么多服务,服务挂了怎么办?
重试机制
熔断机制
限流/降级
负载均衡

转载于:https://www.cnblogs.com/linjiqin/p/10074004.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/387804.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hadoop0.20.0第一个例子

这是Hadoop学习全程记录第2篇,在这篇里我将介绍一下如何在Eclipse下写第一个MapReduce程序。 新说明一下我的开发环境: 操作系统:在windows下使用wubi安装了ubuntu 10.10 hadoop版本:hadoop-0.20.2.tar.gz Eclipse版本&…

IDEA 修改JavaWeb的访问路径

问题描述 对于我这个刚刚使用IDEA不久的新手来说,能够正常运行就不错了,不过到了后面,可能会觉得IDEA给你分配的默认访问路径很不顺手,比如访问的时候需要通过: http://localhost:8080/web_war_exploded/ 来访问,对于web_w…

做一个vue的todolist列表

<template><div id"app"><input type"text" v-model"todo" ref"ip"/><button click"add()">新增</button><br/><br/><hr/><ul><li v-for"(item,key) in li…

一种解决 MacBook 里的 App Store 无法登录的问题

刚刚买回来的 2018 款带有 touchbar 的 MacBook Pro 15 inc 在用 App Store 安装 app 时一直无法登录成功&#xff08;网络链接都是好的&#xff09;&#xff0c;导致软件都无法更新&#xff0c;折腾了挺一会的。 后来发现是要退出设置里的 iCloud 登录&#xff0c;然后重新登录…

第二次冲刺

1、今日各个成员的问题 组员问题张晋誌对mui的API看得不是很懂&#xff0c;无法顺利的使用袁庆杰基础不牢,编写困难周建峰eclipse没法创建web项目&#xff0c;按照网上的方法&#xff0c;check for updates 和 install new software 之后也没用许家烨给单一功能知道如何实现但项…

单纯形法

单纯形法 如果目标函数中所有系数都非正&#xff0c;那么显然这些变量直接取0是最优的&#xff0c;所以此时答案为即为常数项。 我们要做的就是通过转化把目标函数的系数全部搞成非负。 思路就是用非基变量替换基变量。 先找到一个目标函数中系数为正的变量&#xff0c;在所有限…

分布式数据库数据一致性的原理、与技术实现方案

http://youzhixueyuan.com/the-principle-and-technology-realization-of-distributed-data-consistency.html 背景 可用性&#xff08;Availability&#xff09;和一致性&#xff08;Consistency&#xff09;是分布式系统的基本问题&#xff0c;先有著名的CAP理论定义过分布式…

模块之re模块 —— 正则

#‘match’只匹配从左向右第一个值是否在中括号的范围内&#xff0c;如果没有就返回None 如果有就直接打印一个对象&#xff0c;加上.group()就可以返回你要找的区间里面的值&#xff0c;如果没有找到对应的值&#xff0c;加上‘.group()’会报错 #‘search’ 默认是从整个st…

centos7 docker

Docker 是一个开源工具&#xff0c;它可以让创建和管理 Linux 容器变得简单。容器就像是轻量级的虚拟机&#xff0c;并且可以以毫秒级的速度来启动或停止。Docker 帮助系统管理员和程序员在容器中开发应用程序&#xff0c;并且可以扩展到成千上万的节点。 容器和 VM&#xff08…

Intellij Idea 2017创建web项目及tomcat部署实战

相关软件&#xff1a;Intellij Idea2017、jdk16、tomcat7 Intellij Idea直接安装&#xff08;可根据需要选择自己设置的安装目录&#xff09;&#xff0c;jdk使用1.6/1.7/1.8都可以&#xff0c;主要是配置好系统环境变量&#xff0c;tomcat7上tomcat的官网下载压缩包解压即可。…

docker ssh

1&#xff0c;首先&#xff0c;需要从Docker官网获得centos或Ubuntu镜像 2&#xff0c;当本地已有Ubuntu镜像后&#xff08;大概200M左右大小&#xff09;&#xff0c;使用如下命令 [cpp]view plaincopy docker run -t -i ubuntu /bin/bash 即可启动一个容器&#xff0c;并放…

[BFS]JZOJ 4672 Graph Coloring

Description 现在你有一张无向图包含n个节点m条边。最初&#xff0c;每一条边都是蓝色或者红色。每一次你可以将一个节点连接的所有边变色&#xff08;从红变蓝&#xff0c;蓝变红&#xff09;。找到一种步数最小的方案&#xff0c;使得所有边的颜色相同。Input 第一行包含两个…

JAVA的值传递问题

为什么 Java 中只有值传递&#xff1f; 首先回顾一下在程序设计语言中有关将参数传递给方法&#xff08;或函数&#xff09;的一些专业术语。按值调用(call by value)表示方法接收的是调用者提供的值&#xff0c;而按引用调用&#xff08;call by reference)表示方法接收的是调…

2017 百度杯丶二月场第一周WP

1.祸起北荒 题目&#xff1a; 亿万年前 天子之子华夜&#xff0c;被父神之神末渊上神告知六荒十海之北荒西二旗即将发生一场“百度杯”的诸神之战 他作为天族的太子必须参与到此次诸神之战定六荒十海 华夜临危受命&#xff0c;马上带着火凤凰飞行到北荒“西二旗” 却没想到这六…

iPhone手机屏幕尺寸(分辨率)

第一代iPhone2G屏幕为3.5英吋&#xff0c;分辨率为320*480像素&#xff0c;比例为3:2。 第二代iPhone3G屏幕为3.5英吋&#xff0c;分辨率为320*480像素&#xff0c;比例为3:2。 第三代iPhone3GS屏幕为3.5英吋&#xff0c;分辨率为320*480像素&#xff0c;比例为3:2。 第四代iPh…

UDP打洞NAT大致分为下面四类 P2P

NAT大致分为下面四类 1) Full Cone 这种NAT内部的机器A连接过外网机器C后,NAT会打开一个端口.然后外网的任何发到这个打开的端口的UDP数据报都可以到达A.不管是不是C发过来的. 例如 A:192.168.8.100 NAT:202.100.100.100 C:292.88.88.88 A(192.168.8.100:5000) -> NAT(202.1…

让内核突破512字节的限制

转载于:https://www.cnblogs.com/ZHONGZHENHUA/p/10124237.html

struts2的漏洞

文章前半部分来自团队小伙伴阿德马的总结&#xff0c;后半部分的Poc和Exp是小编匆忙之际借鉴而来&#xff0c;感谢写Poc和Exp的伙伴~ 安恒给官方上报的&#xff0c;然后官方选择了1个对国内来说比较敏感的时期发了公告出来&#xff0c;好蛋疼。 该漏洞的CVE编号是CVE-2017-56…

Leetcode PHP题解--D47 868. Binary Gap

2019独角兽企业重金招聘Python工程师标准>>> D47 868. Binary Gap 题目链接 868. Binary Gap 题目分析 给定一个数字&#xff0c;计算其二进制表示中&#xff0c;出现的两个1最大距离。 思路 当然是先转换成二进制了。再进行遍历。 当只有一个1时&#xff0c;返回0。…