日本免费精品视频,男人的天堂在线免费视频,成人久久久精品乱码一区二区三区,高清成人爽a毛片免费网站

在線客服
架構(gòu)探險:從零開始寫分布式服務(wù)框架圖書
人氣:107

架構(gòu)探險:從零開始寫分布式服務(wù)框架

一線實戰(zhàn)技術(shù)專家多方位解析分布式服務(wù)框架底層技術(shù)細節(jié),手把手教你搭建一個完整的符合自身需求的分布式服務(wù)框架

內(nèi)容簡介

分布式服務(wù)框架目前已經(jīng)是互聯(lián)網(wǎng)公司實現(xiàn)SOA服務(wù)化架構(gòu)的必備基礎(chǔ)設(shè)施,對于一般的開發(fā)而言,自己要獨立實現(xiàn)一個分布式服務(wù)框架,還是有相當(dāng)?shù)碾y度的。本書圍繞如何從零開始實現(xiàn)一個可用的分布式服務(wù)框架,介紹了實現(xiàn)分布式服務(wù)框架所需技術(shù)的方方面面。對于從事開發(fā)行業(yè)的程序員有很大的現(xiàn)實價值。能夠從中學(xué)習(xí)到很多的實用技術(shù),了解并掌握實現(xiàn)分布式服務(wù)框架所需的思想以及技術(shù)。

編輯推薦

一個長期戰(zhàn)斗在一線的美團-大眾點評技術(shù)專家

詳細講述了分布式服務(wù)框架的底層實現(xiàn)細節(jié)

清楚梳理了分布式服務(wù)框架周邊的知識點

從零開始構(gòu)建了一個分布式服務(wù)框架

實戰(zhàn)操練的代碼透漏出作者身經(jīng)百戰(zhàn)的深厚功力

技術(shù)原理和內(nèi)部實現(xiàn)分析提升技術(shù)理解和洞察力

目前企業(yè)真正使用微服務(wù)非常少,而使用分布式服務(wù)框架比較多,實現(xiàn)相對簡單,作者所在公司美團在分布式服務(wù)框架實現(xiàn)方面具有豐富的經(jīng)驗。

《架構(gòu)探險:從零開始寫分布式服務(wù)框架》能順利地帶領(lǐng)你走出架構(gòu)險境,讓你對分布式服務(wù)框架所涉及的技術(shù)了然于胸,并能合理地利用這些技術(shù),搭建符合自身需求的分布式服務(wù)框架。

作者簡介

李業(yè)兵

先后在支付寶運營支撐事業(yè)部、去哪兒網(wǎng)酒店事業(yè)部任職高級開發(fā)工程師。于2015年加入貓眼電影(原美團網(wǎng)旗下電影事業(yè)部),負責(zé)交易業(yè)務(wù)線架構(gòu)與開發(fā)工作。

擅長電商交易領(lǐng)域系統(tǒng)設(shè)計與架構(gòu),在電商交易領(lǐng)域系統(tǒng)架構(gòu)設(shè)計方面積累了較為豐富的實踐經(jīng)驗。

對高并發(fā)系統(tǒng)設(shè)計、服務(wù)化架構(gòu)、互聯(lián)網(wǎng)中間件開發(fā)保持著濃厚的興趣。

目錄

第1章 常用的RPC框架 1

1.1 RPC框架原理 1

1.2 RMI介紹 2

1.2.1 原生RMI代碼示例 3

1.2.2 RMI穿透防火墻 5

1.3 CXF/Axis2介紹 7

1.3.1 CXF介紹 7

1.3.2 Axis2介紹 14

1.4 Thrift介紹 21

1.4.1 Thrift工作原理介紹 23

1.4.2 Thrift IDL語法說明 26

1.4.3 基于Apache Thrift的Java版完整案例 28

1.4.4 基于Java注解的簡化實現(xiàn) 36

1.5 gRPC介紹 42

1.5.1 protobuf3語法介紹 43

1.5.2 gRPC使用示例 45

1.6 HTTP Client介紹 53

1.6.1 構(gòu)建HttpClient對象 54

1.6.2 構(gòu)建URI對象 55

1.6.3 構(gòu)建請求對象(HttpGet、HttpPost) 56

1.6.4 HttpClient發(fā)起調(diào)用及獲取調(diào)用返回結(jié)果 56

1.7 實現(xiàn)自己的RPC框架 61

1.8 RPC框架與分布式服務(wù)框架的區(qū)別 68

1.9 本章小結(jié) 68

第2章 分布式服務(wù)框架總體架構(gòu)與功能 69

2.1 面向服務(wù)的體系架構(gòu)(SOA) 69

2.1.1 面向服務(wù)架構(gòu)范式 69

2.1.2 服務(wù)拆分原則 71

2.2 分布式服務(wù)框架現(xiàn)實需求 72

2.3 分布式服務(wù)框架總體架構(gòu)及所需的技術(shù)概述 72

2.4 本章小結(jié) 74

第3章 分布式服務(wù)框架序列化與反序列化實現(xiàn) 75

3.1 序列化原理及常用的序列化介紹 75

3.2 Java默認的序列化 77

3.3 XML序列化框架介紹 80

3.4 JSON序列化框架介紹 82

3.5 Hessian序列化框架介紹 87

3.6 protobuf序列化框架介紹 88

3.7 protostuff序列化框架介紹 93

3.8 Thrift序列化框架介紹 98

3.9 Avro序列化框架介紹 100

3.9.1 Avro介紹 100

3.9.2 Avro IDL語言介紹 101

3.9.3 Schema定義介紹 103

3.9.4 Maven配置及使用IDL與Schema自動生成代碼 103

3.9.5 Avro序列化/反序列化實現(xiàn) 105

3.10 JBoss Marshalling序列化框架介紹 110

3.11 序列化框架的選型 112

3.12 實現(xiàn)自己的序列化工具引擎 113

3.13 本章小結(jié) 118

第4章 實現(xiàn)分布式服務(wù)框架服務(wù)的與引入 119

4.1 Spring Framework框架概述 119

4.1.1 Spring Framework介紹 119

4.1.2 Spring Framework周邊生態(tài)項目介紹 121

4.2 FactoryBean的秘密 122

4.2.1 FactoryBean的作用及使用場景 123

4.2.2 FactoryBean實現(xiàn)原理及示例說明 124

4.3 Spring框架對于已有RPC框架集成的支持 127

4.3.1 Spring支持集成RPC框架介紹 127

4.3.2 基于RmiProxyFactoryBean 實現(xiàn)RMI與Spring的集成 128

4.3.3 基于HttpInvokerProxyFactoryBean實現(xiàn)HTTP Invoker與Spring的集成 131

4.3.4 基于HessianProxyFactoryBean實現(xiàn)Hessian與Spring的集成 133

4.4 實現(xiàn)自定義服務(wù)框架與Spring的集成 136

4.4.1 實現(xiàn)遠程服務(wù)的 136

4.4.2 實現(xiàn)遠程服務(wù)的引入 144

4.5 在Spring中定制自己的XML標(biāo)簽 150

4.6 本章小結(jié) 158

第5章 分布式服務(wù)框架注冊中心 159

5.1 服務(wù)注冊中心介紹 159

5.2 ZooKeeper實現(xiàn)服務(wù)的注冊中心原理 161

5.2.1 ZooKeeper介紹 161

5.2.2 部署ZooKeeper 161

5.2.3 ZkClient使用介紹 164

5.2.4 ZooKeeper實現(xiàn)服務(wù)注冊中心 173

5.3 集成ZooKeeper實現(xiàn)自己的服務(wù)注冊與發(fā)現(xiàn) 175

5.3.1 服務(wù)注冊中心服務(wù)提供方 175

5.3.2 服務(wù)注冊中心服務(wù)消費方 176

5.3.3 服務(wù)注冊中心實現(xiàn) 178

5.4 本章小結(jié) 189

第6章 分布式服務(wù)框架底層通信實現(xiàn) 190

6.1 Java I/O模型及I/O類庫的進化 190

6.1.1 Linux下實現(xiàn)的I/O模型 190

6.1.2 Java語言實現(xiàn)的I/O模型 194

6.1.3 Java Classic I/O(Blocking I/O)介紹 194

6.1.4 Java Non-blocking I/O(NIO)介紹 211

6.1.5 NIO2及Asynchronous I/O介紹 233

6.2 Netty使用介紹 255

6.2.1 Netty開發(fā)入門 256

6.2.2 Netty粘包/半包問題解決 265

6.3 使用Netty構(gòu)建服務(wù)框架底層通信 320

6.3.1 構(gòu)建分布式服務(wù)框架Netty服務(wù)端 320

6.3.2 構(gòu)建分布式服務(wù)框架服務(wù)調(diào)用端Netty客戶端 330

6.4 本章小結(jié) 347

第7章 分布式服務(wù)框架軟負載實現(xiàn) 348

7.1 軟負載的實現(xiàn)原理 348

7.2 負載均衡常用算法 349

7.2.1 軟負載隨機算法實現(xiàn) 349

7.2.2 軟負載加權(quán)隨機算法實現(xiàn) 350

7.2.3 軟負載輪詢算法實現(xiàn) 351

7.2.4 軟負載加權(quán)輪詢算法實現(xiàn) 352

7.2.5 軟負載源地址hash算法實現(xiàn) 354

7.3 實現(xiàn)自己的軟負載機制 355

7.4 軟負載在分布式服務(wù)框架中的應(yīng)用 357

7.5 本章小結(jié) 361

第8章 分布式服務(wù)框架服務(wù)治理 362

8.1 服務(wù)治理介紹 362

8.2 服務(wù)治理的簡單實現(xiàn) 364

8.2.1 服務(wù)分組路由實現(xiàn) 364

8.2.2 簡單服務(wù)依賴關(guān)系分析實現(xiàn) 374

8.2.3 服務(wù)調(diào)用鏈路跟蹤實現(xiàn)原理 380

8.3 本章小結(jié) 380

附錄A 如何配置運行本書完成的分布式服務(wù)框架 381

在線預(yù)覽

7.2 負載均衡常用算法

負載均衡常用算法主要有隨機、加權(quán)隨機、輪詢、加權(quán)輪詢、源地址hash等。

7.2.1 軟負載隨機算法實現(xiàn)

隨機算法原理為:獲取服務(wù)列表大小范圍內(nèi)的隨機數(shù),將該隨機數(shù)作為列表索引,從服務(wù)提供列表中獲取服務(wù)提供者。

為負載均衡策略算法定義接口如下:

public interface ClusterStrategy {

public ProviderService select(List providerServices);

}

其中接口方法入?yún)roviderServices為服務(wù)提供者列表。

軟負載隨機算法的實現(xiàn)過程如下。

import ares.remoting.framework.cluster.ClusterStrategy;

import ares.remoting.framework.model.ProviderService;

import org.apache.commons.lang3.RandomUtils;

import java.util.List;

public class RandomClusterStrategyImpl implements ClusterStrategy {

@Override

public ProviderService select(List providerServices) {

int MAX_LEN = providerServices.size();

int index = RandomUtils.nextInt(0, MAX_LEN - 1);

return providerServices.get(index);

}

}

實現(xiàn)原理:獲得服務(wù)提供者列表大小區(qū)間之間的隨機數(shù),作為服務(wù)提供者列表的索引來獲取服務(wù)。

7.2.2 軟負載加權(quán)隨機算法實現(xiàn)

加權(quán)隨機算法在隨機算法的基礎(chǔ)上針對權(quán)重做了處理。軟負載加權(quán)隨機算法實現(xiàn)代碼如下。

import ares.remoting.framework.cluster.ClusterStrategy;

import ares.remoting.framework.model.ProviderService;

import com.google.common.collect.Lists;

import org.apache.commons.lang3.RandomUtils;

import java.util.List;

public class WeightRandomClusterStrategyImpl implements ClusterStrategy {

@Override

public ProviderService select(List providerServices) {

//存放加權(quán)后的服務(wù)提供者列表

List providerList = Lists.newArrayList();

for (ProviderService provider : providerServices) {

int weight = provider.getWeight();

for (int i = 0; i < weight; i ) {

providerList.add(provider.copy());

}

}

int MAX_LEN = providerList.size();

int index = RandomUtils.nextInt(0, MAX_LEN - 1);

return providerList.get(index);

}

}

實現(xiàn)原理:首先根據(jù)加權(quán)數(shù)放大服務(wù)提供者列表,比如服務(wù)提供者A加權(quán)數(shù)為3,放大之后變?yōu)锳,A,A,存放在新的服務(wù)提供者列表,然后對新的服務(wù)提供者列表應(yīng)用隨機算法。

7.2.3 軟負載輪詢算法實現(xiàn)

輪詢算法,將服務(wù)調(diào)用請求按順序輪流分配到服務(wù)提供者后端服務(wù)器上,均衡對待每一臺服務(wù)提供者機器。軟負載輪詢算法實現(xiàn)代碼如下。

import ares.remoting.framework.cluster.ClusterStrategy;

import ares.remoting.framework.model.ProviderService;

import java.util.List;

import java.util.concurrent.TimeUnit;

import java.util.concurrent.locks.Lock;

import java.util.concurrent.locks.ReentrantLock;

public class PollingClusterStrategyImpl implements ClusterStrategy {

//計數(shù)器

private int index = 0;

private Lock lock = new ReentrantLock();

@Override

public ProviderService select(List providerServices) {

ProviderService service = null;

try {

lock.tryLock(10, TimeUnit.MILLISECONDS);

//若計數(shù)大于服務(wù)提供者個數(shù),將計數(shù)器歸0

if (index >= providerServices.size()) {

index = 0;

}

service = providerServices.get(index);

index ;

} catch (InterruptedException e) {

e.printStackTrace();

} finally {

lock.unlock();

}

//兜底,保障程序健壯性,若未取到服務(wù),則直接取第1個

if (service == null) {

service = providerServices.get(0);

}

return service;

}

}

實現(xiàn)原理:依次按順序獲取服務(wù)提供者列表中的數(shù)據(jù),并使用計數(shù)器記錄使用過的數(shù)據(jù)索引,若數(shù)據(jù)索引到一個數(shù)據(jù),則計數(shù)器歸零,重新開始新的循環(huán)。

7.2.4 軟負載加權(quán)輪詢算法實現(xiàn)

加權(quán)輪詢算法是在輪詢算法的基礎(chǔ)上對權(quán)重做了處理。軟負載加權(quán)輪詢算法實現(xiàn)代碼如下。

import ares.remoting.framework.cluster.ClusterStrategy;

import ares.remoting.framework.model.ProviderService;

import com.google.common.collect.Lists;

import java.util.List;

import java.util.concurrent.TimeUnit;

import java.util.concurrent.locks.Lock;

import java.util.concurrent.locks.ReentrantLock;

public class WeightPollingClusterStrategyImpl implements ClusterStrategy {

//計數(shù)器

private int index = 0;

private Lock lock = new ReentrantLock();

@Override

public ProviderService select(List providerServices) {

ProviderService service = null;

try {

lock.tryLock(10, TimeUnit.MILLISECONDS);

//存放加權(quán)后的服務(wù)提供者列表

List providerList = Lists.newArrayList();

for (ProviderService provider : providerServices) {

int weight = provider.getWeight();

for (int i = 0; i < weight; i ) {

providerList.add(provider.copy());

}

}

//若計數(shù)大于服務(wù)提供者個數(shù),將計數(shù)器歸0

if (index >= providerList.size()) {

index = 0;

}

service = providerList.get(index);

index ;

return service;

} catch (InterruptedException e) {

e.printStackTrace();

} finally {

lock.unlock();

}

//兜底,保障程序健壯性,若未取到服務(wù),則直接取第1個

return providerServices.get(0);

}

}

實現(xiàn)原理:首先根據(jù)加權(quán)數(shù)放大服務(wù)提供者列表,再在放大后的服務(wù)提供者基礎(chǔ)上使用輪詢算法獲取服務(wù)提供者。

7.2.5 軟負載源地址hash算法實現(xiàn)

源地址hash算法實際是利于請求來源的IP的hashcode對服務(wù)提供者列表大小取模,得到服務(wù)提供者列表索引,進而獲取到服務(wù)提供者。軟負載源地址hash算法實現(xiàn)代碼如下。

import ares.remoting.framework.Helper.IPHelper;

import ares.remoting.framework.cluster.ClusterStrategy;

import ares.remoting.framework.model.ProviderService;

import java.util.List;

public class HashClusterStrategyImpl implements ClusterStrategy {

@Override

public ProviderService select(List providerServices) {

//獲取調(diào)用方IP

String localIP = IPHelper.localIp();

//獲取源地址對應(yīng)的hashcode

int hashCode = localIP.hashCode();

//獲取服務(wù)列表大小

int size = providerServices.size();

return providerServices.get(hashCode % size);

}

}

實現(xiàn)原理:使用調(diào)用方IP地址的hash值,將服務(wù)列表大小取模后的值作為服務(wù)列表索引,根據(jù)該索引取值。

媒體評論

隨著微服務(wù)的流行,支撐微服務(wù)的分布式服務(wù)框架成為大家優(yōu)先發(fā)展的重點。服務(wù)化的基本原理掌握起來相對比較容易,但是要從零構(gòu)建一個分布式服務(wù)框架卻比較困難,涉及通信、線程并發(fā)、服務(wù)調(diào)度等。本書詳細講解了構(gòu)建服務(wù)框架所需的各種技術(shù)及框架選型,手把手教初學(xué)者搭建一套完整的分布式服務(wù)框架,如果你想掌握分布式服務(wù)框架底層的技術(shù)細節(jié),自己開發(fā)一套適合本公司和領(lǐng)域的服務(wù)框架,本書是一個非常不錯的選擇!

——華為架構(gòu)師,《分布式服務(wù)框架原理與實踐》《Netty指南》作者 李林鋒

簡潔明了的文字把技術(shù)介紹得深入淺出,實戰(zhàn)操練的代碼透漏出作者身經(jīng)百戰(zhàn)的深厚功力,通過本書不僅可以快速地了解和上手分布式服務(wù)框架開發(fā)技術(shù),還能通過技術(shù)原理和內(nèi)部實現(xiàn)的分析介紹,提升我們對技術(shù)的理解和洞察力。

——貓眼電影技術(shù)負責(zé)人 陳清陽

基于服務(wù)調(diào)用相關(guān)知識,業(yè)界已產(chǎn)出了不少技術(shù)書籍。本書汲取各家之精華,不同技術(shù)層級的人通過不同的章節(jié)都能獲得極大的收獲。更為難能可貴的是,作者是一個長期戰(zhàn)斗在工程一線,一步一步成長起來的美團-大眾點評技術(shù)專家,設(shè)計過大量的工程框架并主導(dǎo)開發(fā)實現(xiàn),經(jīng)受住了多種復(fù)雜業(yè)務(wù)形態(tài)的考驗。憑借著作者本人多年的積累,凝聚出了書中豐富的示例和經(jīng)驗總結(jié)。通過這些示例和經(jīng)驗總結(jié),內(nèi)容逐漸深入,多方位揭示了服務(wù)間通信的各項技術(shù)關(guān)鍵點,能有效地幫助讀者從新手成長為專家。

——美團點評高級技術(shù)專家(原美團點評技術(shù)委員會委員) 黃波

本書比較地介紹了分布式系統(tǒng)開發(fā)的各方面知識,循序漸進,實例代碼比較多,非常適合初入分布式開發(fā)并且有Java開發(fā)經(jīng)驗的人員參考學(xué)習(xí)。

——香格里拉酒店集團副總裁(原去哪兒網(wǎng)高級系統(tǒng)架構(gòu)師) 孫立

其實我們都在架構(gòu)中探險,或許自己目前正身陷險境,我們希望得到一本“寶典”,教會自己如何找到架構(gòu)的成功捷徑。李業(yè)兵老師寫的這本《架構(gòu)探險:從零開始寫分布式服務(wù)框架》就能順利地帶領(lǐng)我們走出險境,讓我們對分布式服務(wù)框架所涉及的技術(shù)了然于胸,并能合理地利用這些技術(shù),搭建符合自身需求的分布式服務(wù)框架。

——特贊科技 CTO 黃勇

網(wǎng)友評論(不代表本站觀點)

來自無昵稱**的評論:

程序員就是要不停地學(xué)習(xí)學(xué)習(xí),開卷有益,推薦購買!

2017-09-09 14:17:36
來自無昵稱**的評論:

感覺還不錯…

2017-09-12 17:36:30
來自無昵稱**的評論:

入門還是挺不錯的

2017-10-12 22:44:31
來自無昵稱**的評論:

非常完美,加油

2017-10-29 07:40:59

免責(zé)聲明

更多出版社