主頁 > 軟體設計 > 微服務設計(二)---springCloud基礎及注冊中心

微服務設計(二)---springCloud基礎及注冊中心

2022-09-16 09:08:07 軟體設計

1、spring Cloud概述

  Spring Cloud是一系列框架的有序集合,它利用Spring Boot的開發便利性巧妙地簡化了分布式系統基礎設施的開發,如服務發現注冊、配置中心、訊息總線、負載均衡、斷路器、資料監控等,都可以用Spring Boot的開發風格做到一鍵啟動和部署,Spring Cloud并沒有重復制造輪子,它只是將目前各家公司開發的比較成熟、經得起實際考驗的服務框架組合起來,通過Spring Boot風格進行再封裝屏蔽掉復雜的配置和實作原理,最終給開發者留出了一套簡單易懂、易部署和易維護的分布式系統開發工具包,

2、微服務中的相關概念

2.1 服務注冊與發現

  服務注冊:服務實體將自身服務資訊注冊到注冊中心,這部分服務資訊包括服務所在主機IP和提供服務的Port,以及暴露服務自身狀態以及訪問協議等資訊,

  服務發現:服務實體請求注冊中心獲取所依賴服務資訊,服務實體通過注冊中心,獲取到注冊到其中的服務實體的資訊,通過這些資訊去請求它們提供的服務,

2.2 負載均衡

  負載均衡是高可用網路基礎架構的關鍵組件,通常用于將作業負載分布到多個服務器來提高網站、應用、資料庫或其他服務的性能和可靠性,

2.3 熔斷

  熔斷在互聯網系統中,當下游服務因訪問壓力過大而回應變慢或失敗,上游服務為了保護系統整體的可用性,可以暫時切斷對下游服務的呼叫,這種犧牲區域,保全整體的措施就叫做熔斷,

2.4 鏈路追蹤

  隨著微服務架構的流行,服務按照不同的維度進行拆分,一次請求往往需要涉及到多個服務,互聯網應用構建在不同的軟體模塊集上,這些軟體模塊,有可能是由不同的團隊開發、可能使用不同的編程語言 來實作、有可能布在了幾千臺服務器,橫跨多個不同的資料中心,因此,就需要對一次請求涉及的多個服務鏈路進行日志記錄,性能監控即鏈路追蹤,

2.5 API網關

  隨著微服務的不斷增多,不同的微服務一般會有不同的網路地址,而外部客戶端可能需要呼叫多個服務 的介面才能完成一個業務需求,如果讓客戶端直接與各個微服務通信可能出現: 客戶端需要呼叫不同的url地址,增加難度再一定的場景下,存在跨域請求的問題,每個微服務都需要進行單獨的身份認證針對這些問題,API網關順勢而生, API網關直面意思是將所有API呼叫統一接入到API網關層,由網關層統一接入和輸出,一個網關的基本功能有:統一接入、安全防護、協議適配、流量管控、長短鏈接支持、容錯能力,有了網關之后,各個 API服務提供團隊可以專注于自己的的業務邏輯處理,而API網關更專注于安全、流量、路由等問題,

3、 SpringCloud架構

3.1 SpringCloud中的核心組件

  Spring Cloud的本質是在Spring Boot的基礎上,增加了一堆微服務相關的規范,并對應用背景關系 (Application Context)進行了功能增強,既然 Spring Cloud 是規范,那么就需要去實作,目前 Spring Cloud 規范已有 Spring官方,Spring Cloud Netflix,Spring Cloud Alibaba等實作,通過組件化的方式,Spring Cloud將這些實作整合到一起構成全家桶式的微服務技術堆疊,

   Spring Cloud Netflix組件

 

3.2 SpringCloud的體系結構

從上圖可以看出Spring Cloud各個組件相互配合,合作支持了一套完整的微服務架構,

  注冊中心負責服務的注冊與發現,很好將各服務連接起來

  斷路器負責監控服務之間的呼叫情況,連續多次失敗進行熔斷保護,

  API網關負責轉發所有對外的請求和服務

  配置中心提供了統一的配置資訊管理服務,可以實時的通知各個服務獲取最新的配置資訊

  鏈路追蹤技術可以將所有的請求資料記錄下來,方便我們進行后續分析

各個組件又提供了功能完善的dashboard監控平臺,可以方便的監控各組件的運行狀況

 

4、 服務注冊Eureka基礎

4.1 微服務的注冊中心

  注冊中心可以說是微服務架構中的”通訊錄“,它記錄了服務和服務地址的映射關系,在分布式架構中, 服務會注冊到這里,當服務需要呼叫其它服務時,就這里找到服務的地址,進行呼叫,

4.2 注冊中心的主要作用

  服務注冊中心(下稱注冊中心)是微服務架構非常重要的一個組件,在微服務架構里主要起到了協調者 的一個作用,注冊中心一般包含如下幾個功能:

  1. 服務發現:

    服務注冊/反注冊:保存服務提供者和服務呼叫者的資訊

    服務訂閱/取消訂閱:服務呼叫者訂閱服務提供者的資訊,最好有實時推送的功能

    服務路由(可選):具有篩選整合服務提供者的能力,

  2. 服務配置:

    配置訂閱:服務提供者和服務呼叫者訂閱微服務相關的配置

    配置下發:主動將配置推送給服務提供者和服務呼叫者

  3. 服務健康檢測

    檢測服務提供者的健康情況,

4.3 常見的注冊中心

  Zookeeper

  zookeeper它是一個分布式服務框架,是Apache Hadoop 的一個子專案,它主要是用來解決分布式應用中經常遇到的一些資料管理問題,如:統一命名服務、狀態同步服務、集群管理、分布式應用配置項 的管理等,簡單來說zookeeper=檔案系統+監聽通知機制,

  Eureka

  Eureka是在Java語言上,基于Restful Api開發的服務注冊與發現組件,Springcloud Netflix中的重要組 件 Consul Consul是由HashiCorp基于Go語言開發的支持多資料中心分布式高可用的服務發布和注冊服務軟體, 采用Raft演算法保證服務的一致性,且支持健康檢查,

  Nacos

  Nacos是一個更易于構建云原生應用的動態服務發現、配置管理和服務管理平臺,簡單來說 Nacos 就是 注冊中心 + 配置中心的組合,提供簡單易用的特性集,幫助我們解決微服務開發必會涉及到的服務注冊 與發現,服務配置,服務管理等問題,Nacos 還是 Spring Cloud Alibaba 組件之一,負責服務注冊與 發現, 最后我們通過一張表格大致了解Eureka、Consul、Zookeeper的異同點,選擇什么型別的服務注冊與 發現組件可以根據自身專案要求決定,

4.4 Eureka的概述

4.4.1 Eureka基礎

  Eureka是Netflix開發的服務發現框架,SpringCloud將它集成在自己的子專案spring-cloud-netflix中, 實作SpringCloud的服務發現功能,

  上圖簡要描述了Eureka的基本架構,由3個角色組成:

  1、Eureka Server 提供服務注冊和發現

  2、Service Provider 服務提供方 將自身服務注冊到Eureka,從而使服務消費方能夠找到

  3、Service Consumer 服務消費方 從Eureka獲取注冊服務串列,從而能夠消費服務

  1.1 Eureka Server

  Eureka Server提供服務注冊服務,各個節點啟動后,會在Eureka Server中進行注冊,這樣Eureka Server中的服務注冊表中將會存盤所有可用服務節點的資訊,服務節點的資訊可以在界面中直觀的看到,
  Eureka Server本身也是一個服務,默認情況下會自動注冊到Eureka注冊中心,
  如果搭建單機版的Eureka Server注冊中心,則需要配置取消Eureka Server的自動注冊邏輯畢竟當前服務注冊到當前服務代表的注冊中心中是一個說不通的邏輯,
  Eureka Server通過Register、Get、Renew等介面提供服務的注冊、發現和心跳檢測等服務,

  2.1 Eureka Client

  Eureka Client是一個java客戶端,用于簡化與Eureka Server的互動,客戶端同時也具備一個內置的、使用輪詢(round-robin)負載演算法的負載均衡器,在應用啟動后,將會向Eureka Server發送心跳,默認周期為30秒,如果Eureka Server在多個心跳周期內沒有接收到某個節點的心跳,Eureka Server將會從服務注冊表中把這個服務節點移除(默認90秒)
  Eureka Client分為兩個角色,分別是:Application Service(Service Provider)和Application Client(Service Consumer)

4.4.2 Eureka的互動流程與原理

  圖是來自Eureka官方的架構圖,大致描述了Eureka集群的作業程序,圖中包含的組件非常多,可能比 較難以理解,我們用通俗易懂的語言解釋一下: Application Service 相當于本書中的服務提供者,Application Client相當于服務消費者; Make Remote Call,可以簡單理解為呼叫RESTful API; us-east-1c、us-east-1d等都是zone,它們都屬于us-east-1這個region; 由圖可知,Eureka包含兩個組件:Eureka Server 和 Eureka Client,它們的作用如下: Eureka Client是一個Java客戶端,用于簡化與Eureka Server的互動; Eureka Server提供服務發現的能力,各個微服務啟動時,會通過Eureka Client向Eureka Server 進行注冊自己的資訊(例如網路資訊),Eureka Server會存盤該服務的資訊; 微服務啟動后,會周期性地向Eureka Server發送心跳(默認周期為30秒)以續約自己的資訊,如 果Eureka Server在一定時間內沒有接收到某個微服務節點的心跳,Eureka Server將會注銷該微服 務節點(默認90秒); 每個Eureka Server同時也是Eureka Client,多個Eureka Server之間通過復制的方式完成服務注 冊表的同步; Eureka Client會快取Eureka Server中的資訊,即使所有的Eureka Server節點都宕掉,服務消費 者依然可以使用快取中的資訊找到服務提供者, 綜上,Eureka通過心跳檢測、健康檢查和客戶端快取等機制,提高了系統的靈活性、可伸縮性和可用性,

4.4.3 搭建Eureka注冊中心

(1) 引入maven坐標

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

(2) 配置application.properties(全域配置)

spring.application.name=eureka-server # 設定spring應用命名,可以自定義,非必要

server.port: 8761 #eureka server web配置埠

eureka.instance.hostname: localhost #設定eureka實體名稱,建議與組態檔的變數相同,必須和Linux系統域名相同

eureka.client.registerWithEureka: false #是否將自己注冊到eureka-server中,默認為true

eureka.fetchRegistry: false #是否從eureka-server中獲取服務注冊資訊,默認為true

euraka.serviceUrl.defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #設定服務注冊中心地址,指向另一個注冊中心,使用域名作為訪問路徑



registerWithEureka: 是否將自己注冊到Eureka服務中,本身就是所有無需注冊 fetchRegistry : 是否從Eureka中獲取注冊資訊 serviceUrlEureka: 客戶端與Eureka服務端進行互動的地址

(3) 配置啟動類

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
 public static void main(String[] args) {
   SpringApplication.run(EurekaServerApplication.class, args);
 }

(5) 服務注冊到Eureka注冊中心

5.1 引入坐標

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-commons</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
</dependencies>

5.2 配置application.properties檔案

  在工程的 application.properties中添加Eureka Server的主機地址

 

# eureka server的路徑
eureka.client.serviceUrl.efaultZone: http://localhost:8761/eureka/

instance.prefer-ip-address: true #使用ip注冊

5.3 修改啟動類添加服務注冊注解

@SpringBootApplication
//@EnableDiscoveryClient
//@EnableEurekaClient
public class UserApplication {
 public static void main(String[] args) {
   SpringApplication.run(UserApplication.class, args);
 }
}

 從Spring Cloud Edgware版本開始, @EnableDiscoveryClient 或 @EnableEurekaClient 可 省略,只需加上相關依賴,并進行相應配置,即可將微服務注冊到服務發現組件上,

4.4.4 Eureka中的自我保護

  微服務第一次注冊成功之后,每30秒會發送一次心跳將服務的實體資訊注冊到注冊中心,通知 Eureka Server 該實體仍然存在,如果超過90秒沒有發送更新,則服務器將從注冊資訊中將此服務移除, Eureka Server在運行期間,會統計心跳失敗的比例在15分鐘之內是否低于85%,如果出現低于的情況 (在單機除錯的時候很容易滿足,實際在生產環境上通常是由于網路不穩定導致),Eureka Server會 將當前的實體注冊資訊保護起來,同時提示這個警告,保護模式主要用于一組客戶端和Eureka Server 之間存在網路磁區場景下的保護,一旦進入保護模式,Eureka Server將會嘗試保護其服務注冊表中的資訊,不再洗掉服務注冊表中的資料(也就是不會注銷任何微服務) 驗證完自我保護機制開啟后,并不會馬上呈現到web上,而是默認需等待 5 分鐘(可以通過 eureka.server.wait-time-in-ms-when-sync-empty 配置),即 5 分鐘后你會看到下面的提示資訊:

如果關閉自我保護 通過設定 eureka.enableSelfPreservation=false 來關閉自我保護功能,

4.4.5 Eureka中的元資料

  Eureka的元資料有兩種:標準元資料和自定義元資料,

  標準元資料:主機名、IP地址、埠號、狀態頁和健康檢查等資訊,這些資訊都會被發布在服務注 冊表中,用于服務之間的呼叫,

  自定義元資料:可以使用eureka.instance.metadata-map配置,符合KEY/VALUE的存盤格式,這些元資料可以在遠程客戶端中訪問, 在程式中可以使用DiscoveryClient 獲取指定微服務的所有元資料資訊

@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)
public class RestTemplateTest {

 @Autowired
 private DiscoveryClient discoveryClient;
 @Test
 public void test() {
 //根據微服務名稱從注冊中心獲取相關的元資料資訊
 List<ServiceInstance> instances = discoveryClient.getInstances("shopservice-product");
 for (ServiceInstance instance : instances) {
 System.out.println(instance);
 }
 }
}

4.4.6 Eureka Server安全認證

  Eureka Server作為Spring Cloud中的服務注冊中心,如果可以任意訪問的話,那么其安全性太低,所以Spring Cloud中也有為Eureka Server提供安全認證的方式,可以使用spring-boot-starter-security組件來為Eureka Server增加安全認證,

  pom檔案

<!-- spring boot security安全認證啟動器 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

  修改全域組態檔,在全域組態檔中,開啟基于http basic的安全認證,

# eurekaserver1配置
spring.application.name=eureka-server
server.port=8761

eureka.instance.hostname=eurekaserver1
# 使用http basic安全認證語法,在集群通信中增加認證資訊,  http://用戶名:密碼@地址:埠/eureka/
eureka.client.serviceUrl.defaultZone=http://test:123456@eurekaserver2:8761/eureka/

# 開啟基于http basic的安全認證
security.basic.enabled=true
# 設定安全認證用戶名
security.user.name=test
# 設定安全認證密碼
security.user.password=123456
# eurekaserver2配置
spring.application.name=eureka-server
server.port=8761

eureka.instance.hostname=eurekaserver2
eureka.client.serviceUrl.defaultZone=http://test:123456@eurekaserver1:8761/eureka/

security.basic.enabled=true
security.user.name=test
security.user.password=123456

4.4.8、服務注冊Eureka高級

      Eureka Server 高可用集群

   Eureka Client會定時連接 Eureka Server,獲取注冊表中的資訊并快取到本地,微服務在消費遠程API時總是使用本地快取中的數 據,因此一般來說,即使Eureka Server發生宕機,也不會影響到服務之間的呼叫,但如果Eureka Server宕機時,某些微服務也出現了不可用的情況,Eureka Server中的快取若不被重繪,就可能會影響到微服務的呼叫,甚至影響到整個應用系統的高可用,因此,在生成環境中,通常會部署一個高可用 的Eureka Server集群, Eureka Server可以通過運行多個實體并相互注冊的方式實作高可用部署,Eureka Server實體會彼此增 量地同步資訊,從而確保所有節點資料一致,事實上,節點之間相互注冊是Eureka Server的默認行為,

  搭建 Eureka Server高可用集群

(1)修改本機host屬性 由于是在個人計算機中進行測驗很難模擬多主機的情況,Eureka配置server集群時需要執行host地址, 所以需要修改個人電腦中host地址

127.0.0.1 eureka1
127.0.0.1 eureka2

(2)修改 shop_eureka_server 工程中的yml組態檔,添加如下配置屬性

#指定應用名稱
spring:
 application:
   name: shop-eureka-server
---
#執行peer1的配置資訊
spring:
 profiles: eureka1
server:
 port: 8761
eureka:
 instance:
   hostname: eureka1
 client:
   service-url:
     defaultZone: http://eureka2:8762/eureka
---
#執行peer2的配置資訊

參考:https://www.cnblogs.com/jing99/p/11576133.html

5 Eureka替換方案Consul

5.1 Eureka閉源影響

    在Euraka的GitHub上,宣布Eureka 2.x閉源,近這意味著如果開發者繼續使用作為 2.x 分支上現有作業 repo 一部分發布的代碼庫和工件,則將自負風險,

5.2 Eureka的替換方案

  Zookeeper            

  ZooKeeper是一個分布式的,開放原始碼的分布式應用程式協調服務,是Google的Chubby一個開源的實作,是Hadoop和Hbase的重要組件,它是一個為分布式應用提供一致性服務的軟體,提供的功能包 括:配置維護、域名服務、分布式同步、組服務等, Consul consul是近幾年比較流行的服務發現工具,作業中用到,簡單了解一下,consul的三個主要應用場景: 服務發現、服務隔離、服務配置, Nacos Nacos 是阿里巴巴推出來的一個新開源專案,這是一個更易于構建云原生應用的動態服務發現、配置管 理和服務管理平臺,Nacos 致力于幫助您發現、配置和管理微服務,Nacos 提供了一組簡單易用的特性 集,幫助您快速實作動態服務發現、服務配置、服務元資料及流量管理,Nacos 幫助您更敏捷和容易地 構建、交付和管理微服務平臺, Nacos 是構建以“服務”為中心的現代應用架構 (例如微服務范式、云原 生范式) 的服務基礎設施,

5.2 什么是consul

5.2.1 consul 概述

  Consul 是 HashiCorp 公司推出的開源工具,用于實作分布式系統的服務發現與配置,與其它分布式服 務注冊與發現的方案,Consul 的方案更“一站式”,內置了服務注冊與發現框 架、分布一致性協議實 現、健康檢查、Key/Value 存盤、多資料中心方案,不再需要依賴其它工具(比如 ZooKeeper 等), 使用起來也較 為簡單,Consul 使用 Go 語言撰寫,因此具有天然可移植性(支持Linux、windows和 Mac OS X);安裝包僅包含一個可執行檔案,方便部署,與 Docker 等輕量級容器可無縫配合, Consul 的優勢: 使用 Raft 演算法來保證一致性, 比復雜的 Paxos 演算法更直接. 相比較而言, zookeeper 采用的是 Paxos, 而 etcd 使用的則是 Raft, 支持多資料中心,內外網的服務采用不同的埠進行監聽, 多資料中心集群可以避免單資料中心 的單點故障,而其部署則需要考慮網路延遲, 分片等情況等, zookeeper 和 etcd 均不提供多資料中 心功能的支持, 支持健康檢查, etcd 不提供此功能, 支持 http 和 dns 協議介面, zookeeper 的集成較為復雜, etcd 只支持 http 協議, 官方提供 web 管理界面, etcd 無此功能, 綜合比較, Consul 作為服務注冊和配置管理的新星, 比較值得關注和研究, 特性: 服務發現 健康檢查 Key/Value 存盤多資料中心

5.2.2 consul與Eureka的區別

(1)一致性 Consul強一致性(CP) 服務注冊相比Eureka會稍慢一些,因為Consul的raft協議要求必須過半數的節點都寫入成功才認 為注冊成功 Leader掛掉時,重新選舉期間整個consul不可用,保證了強一致性但犧牲了可用性, Eureka保證高可用和最終一致性(AP) 服務注冊相對要快,因為不需要等注冊資訊replicate到其他節點,也不保證注冊資訊是否 replicate成功 當資料出現不一致時,雖然A, B上的注冊資訊不完全相同,但每個Eureka節點依然能夠正常對外提 供服務,這會出現查詢服務資訊時如果請求A查不到,但請求B就能查到,如此保證了可用性但犧牲了一致性,

(2)開發語言和使用 eureka就是個servlet程式,跑在servlet容器中 Consul則是go撰寫而成,安裝啟動即可

5.2.3 Consul的核心知識

  Gossip協議 傳統的監控,如ceilometer,由于每個節點都會向server報告狀態,隨著節點數量的增加server的壓力 隨之增大,在所有的Agent之間(包括服務器模式和普通模式)運行著Gossip協議,服務器節點和普通 Agent都會加入這個Gossip集群,收發Gossip訊息,每隔一段時間,每個節點都會隨機選擇幾個節點發送Gossip訊息,其他節點會再次隨機選擇其他幾個節點接力發送訊息,這樣一段時間過后,整個集群都能收到這條訊息,示意圖如下:

RAFT一致性演算法

  為了實作集群中多個ConsulServer中的資料保持一致性,consul使用了基于強一致性的RAFT演算法, 在Raft中,任何時候一個服務器可以扮演下面角色之一:

1. Leader: 處理所有客戶端互動,日志復制等,一般一次只有一個Leader;

2. Follower: 類似選民,完全被動;

3. Candidate(候選人): 可以被選為一個新的領匯入,

Leader全權負責所有客戶端的請求,以及將資料同步到Follower中(同一時刻系統中只存在一個 Leader),Follower被動回應請求RPC,從不主動發起請求RPC,Candidate由Follower向Leader轉換 的中間狀態 關于RAFT一致性演算法有一個經典的影片http://thesecretlivesofdata.com/raft/,其中詳細介紹了選舉,資料同步的步驟,

5.2.4 Consul 常見問題

(1)節點和服務注銷 當服務或者節點失效,Consul不會對注冊的資訊進行剔除處理,僅僅標記已狀態進行標記(并且不可使用),如果擔心失效節點和失效服務過多影響監控,可以通過呼叫HTTP API的形式進行處理,

(2)健康檢查與故障轉移  在集群環境下,健康檢查是由服務注冊到的Agent來處理的,那么如果這個Agent掛掉了,那么此節點的健康檢查就處于無人管理的狀態, 從實際應用看,節點上的服務可能既要被發現,又要發現別的服務,如果節點掛掉了,僅提供被發現的 功能實際上服務還是不可用的,當然發現別的服務也可以不使用本機節點,可以通過訪問一個Nginx實 現的若干Consul節點的負載均衡來實作,

 

 感謝閱讀,借鑒了不少大佬資料,如需轉載,請注明出處,謝謝!https://www.cnblogs.com/huyangshu-fs/p/13876009.html

 

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/508844.html

標籤:架構設計

上一篇:安全生產 - 系統穩定性建設

下一篇:設計模式之中介者模式

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more