軟件架構演進

傳統架構到分布式架構詳解?

軟件架構演進
軟件架構的發展經歷了從單體架構、垂直架構、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.pswp.cn/news/387804.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387804.shtml
英文地址,請注明出處:http://en.pswp.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…

防撞庫基本要求

專用安全要求 口令要求 設計要求說明 要求 是否滿足 密碼長度至少 8位字符,密碼復雜性要求至少包含以下4種類別中的2種:大寫字母、小寫字母、數字、特殊符號 必選 滿足 系統應具備對口令強度檢測的能力,并對用戶進行提示(盡量不要…

odoo10 繼承(擴展)、模塊數據

一:繼承 在不改變底層對象的時候添加新的功能——這是通過繼承機制來實現的,作為在現有對象之上的修改層,這些修改可以發生在所有級別:模型,視圖和業務邏輯。不是直接修改現有模塊,而是創建一個新模塊以添加…

做一個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…

hadoop+hive-0.10.0完全分布式安裝方法

hadoophive-0.10.0完全分布式安裝方法 1、jdk版本&#xff1a;jdk-7u60-linux-x64.tar.gz http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk7-downloads-1880260.html 2、hive版本&#xff1a;hive-0.10.0.tar.gz https://archive.apache.org/dist/hive/hive-0…

關于gitgithub的操作

先馬克&#xff0c;回頭細看&#xff0c;然后整理一下 https://linux.cn/article-4292-1.html轉載于:https://www.cnblogs.com/mengjie1001/p/10076530.html

一種解決 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;其實就是維持玩家客戶端的連接&#xff0c;將玩家發的游戲請求轉發到具體后端服務的服務器&#xff0c;具有以下幾個功能點&#xff1a; 長期運行&#xff0c;必須具有較高的穩定性和性能對外開放&#xff0c;即客戶端需要知道網關的IP和端口&a…

配置獨立于系統的PYTHON環境

配置獨立于系統的PYTHON環境 python 當前用戶包 一種解決方案是在利用本機的python環境的基礎上&#xff0c;將python的包安裝在當前user的.local文件夾下 一共有兩種方式來實現pip的時候安裝到當前user 設置pip配置文件 pip.conf 一種是在~/.pip文件夾下的pip配置文件pip.conf…

好程序員技術教程分享JavaScript運動框架

好程序員技術教程分享JavaScript運動框架&#xff0c;有需要的朋友可以參考下。 JavaScript的運動&#xff0c;即讓某元素的某些屬性由一個值變到另一個值的過程。如讓div的width屬性由200px變到400px&#xff0c;opacity屬性由0.3變到1.0&#xff0c;就是一個運動過程。 實現運…

linux 下mysql等php的安裝 lnmp

訪問https://lnmp.org/install.html按照步驟安裝 當下載執行完 wget -c http://soft.vpser.net/lnmp/lnmp1.3.tar.gz && tar zxf lnmp1.3.tar.gz && cd lnmp1.3 && ./install.shlnmp 要到.install.sh下改一下下載地址&#xff0c;把http直接更換成…

單純形法

單純形法 如果目標函數中所有系數都非正&#xff0c;那么顯然這些變量直接取0是最優的&#xff0c;所以此時答案為即為常數項。 我們要做的就是通過轉化把目標函數的系數全部搞成非負。 思路就是用非基變量替換基變量。 先找到一個目標函數中系數為正的變量&#xff0c;在所有限…

洛谷P1828 香甜的黃油 Sweet Butter

香甜的黃油 Sweet Butter 黃油真的是這么做的嗎&#xff1f;&#xff01;&#xff01;&#xff01;[惶恐] 這道題是Dijkstra算法的簡單變形 通過題意我們要找到一個點使奶牛所在點的路程和最短。通過Dijkstra的模板我們可以求的一點到其他任一點的最短路徑&#xff0c;那么我們…

JAVA List集合轉Page(分頁對象)

/*** version 1.0* author: fwjia*/ import java.util.List;public class PageModel<T> {/**** 當前頁*/private int page 1;/**** 總頁數*/public int totalPages 0;/**** 每頁數據條數*/private int pageRecorders;/**** 總頁數*/private int totalRows 0;/**** 每頁…

分區分表實驗用的語句

--查看索引 select * from DBA_IND_PARTITIONS &#xff54;; select status,t.* from dba_indexes t where t.OWNERGANSUSC; select count(*) from ACT_HI_VARINST SELECT ALTER INDEX || TABLE_OWNER || . || INDEX_NAME || UNUSABLE; UNUSABLE_INDEX FROM ALL_INDEX…

分布式數據庫數據一致性的原理、與技術實現方案

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…