1. 分布式系統中相關概念
1.1.1 特點:
-
用戶多
-
流量大、並發高
-
海量數據
-
易受攻擊
-
功能繁瑣
-
變更快
1.1.2 指標及相關目標
互聯網項目三高目標:高並發、高可用(99.999%)、高可拓展
其他:可伸縮
、安全性
、敏捷性
1.2 集群&分布式
集群
:很多人一起干,干一樣的事。一個業務模塊,部署在多個服務器上。
是一個橫向概念。
分布式
:很多人一起干,干不一樣的事。這些不一樣的事,合起來是一件大事。
一個大的業務系統,拆分為多個小的不同的業務模塊,分別部署在各個機器上。
是一個縱向的概念。
集群和分布式能初步實現互聯網項目的三高目標。
-
生活中的分布式和集群
-
開發中的分布式和集群
1.3. 軟件架構的演進過程
1.3.1 工作中如何選用軟件架構
如果要使用並實現微服務的架構,整體的技術成本、人力成本、硬件成本、維護成本都會很高。
-
公司/項目非常小,非常適合使用單體架構
-
中型的公司/項目,可以采用垂直/
SOA
架構 -
大型的公司/項目(25+人維護開發一個項目),考慮微服務系統架構
1.3.2 Dubbo
&SpringCloud
Dubbo
主要是為了解決SOA
架構下,服務治理的中間件。
SpringCloud
主要的應用場景就是在微服務的架構之下。
2. Dubbo
簡單概述
2.1 概念
web
、service
拆分出來分別部署到不同的服務器上,dubbo
為了解決遠程調用時候的各種問題的,底層是基於長連接的方式實現RPC。
Dubbo
是一個基於Spring
開發的小項目,可以和Spring無縫整合。
• Dubbo是阿里巴巴公司開源的一個高性能、輕量級的 Java RPC 框架。
• 致力於提供高性能和透明化的 RPC 遠程服務調用方案,以及 SOA 服務治理方案。
了解:
2011年,阿里巴巴開源了自己的SOA服務化治理方案的核心框架Dubbo,SOA架構開始在國內流行。做的是橫向拆分。
在開源之前已經在阿里巴巴內部廣泛使用,開源之后,由於他出色的表現,很快被很多大公司使用,eg:當當、網易考拉等等。
dubbo
的前身是基於Spring
開發的一個項目,所以可以和Spring
無縫銜接,中間停更過一段時間,后來又開始更新並捐給了Apache。最重要的,他有中文版本的文檔,特別友好。通過快速入門體驗dubbo的特點,通過API 文檔可以輕松的學習dubbo中所有的內容。
2.2 Zookeeper
注冊中心
2.2.1 簡單介紹
文檔/Dubbo2.7/用戶文檔/參考手冊/注冊中心參考手冊
2.2.2 安裝
linux
和windows
使用的是同一個安裝包,綠色,解壓可用。
windows下安裝
-
解壓,存放在開發軟件目錄(路徑中不要用中文、空格等特殊符號)
-
在
conf
目錄,復制zoo_sample.cfg
為zoo.cfg
-
修改配置文件中如下兩點:
# 數據保存路徑,建議在安裝目錄新建一個數據文件夾,並在此 指定
dataDir=D:\Develop\soft\apache-zookeeper-3.5.6-bin\zkData
# netty port
# netty服務(web容器)的端口,建議修改為非8080端口
admin.serverPort=8888 -
雙擊bin目錄下
zkServer.cmd
即可啟動,出現如下內容即為啟動成功。默認端口2181。
2.3 Dubbo
架構及執行流程
3 Dubbo
快速入門
3.1 分模塊編寫單體架構項目
分模塊開發項目,兩個模塊中分別包含web
層和service
層
dubbo-service
dubbo-web
3.1.1dubbo-service
pom.xml
<properties>
<spring.version>5.1.9.RELEASE</spring.version>
</properties>
<dependencies>
<!-- servlet3.0規范的坐標 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!--spring的坐標-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!--springmvc的坐標-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!--日志-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.21</version>
</dependency>
</dependencies>
applicationcontext.xml
<context:component-scan base-package="com.yuyy.service" />
日志配置文件log4j.properties
# 略
UserServiceImpl及其接口
public interface UserService {
public String sayHello();
}
3.1.1dubbo-web
pom.xml
<groupId>com.yuyy</groupId>
<artifactId>dubbo-web</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<spring.version>5.1.9.RELEASE</spring.version>
</properties>
<dependencies>
<!-- servlet3.0規范的坐標 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!--spring的坐標-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!--springmvc的坐標-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!--日志-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.21</version>
</dependency>
<!--依賴service模塊-->
<dependency>
<groupId>com.yuyy</groupId>
<artifactId>dubbo-service</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>