一:Neutron實現網路虛擬化
一 雲端計算時代資料中心物理網路的問題
資料中心虛擬化成為了趨勢,最典型的場景莫過於:對資料中心的伺服器進行虛擬化,來提高資源利用率,同時降低單位能耗。
但是,隨著資料中心虛擬化程度的不斷提高、虛擬化伺服器規模的不斷擴大,帶來了巨大的管理壓力。===>這正是雲端計算誕生的原因。
在大規模虛擬化的基礎上,實現了自動化管理和集中化管理,就是雲端計算的基本模型。
雲端計算的超大規模加上其特有的服務模式帶來了諸多亟需解決的問題,這些問題中,首當其衝的就是網路問題
我們需要從兩個角度去看:
一:資料中心現有的物理網路,無法承載雲端計算機的超大規模
(詳見1.1小節)
二:資料中心現有的物理網路,無法滿足雲端計算SDN的要求
(詳見1.2小節)
1.1 資料中心現有的物理網路,無法承載雲端計算機的超大規模
網際網路行業資料中心的基本特徵就是伺服器的規模偏大。進入雲端計算時代後,其業務特徵變得更加複雜,包括:虛擬化支援、多業務承載、資源靈活排程等(如圖1所示)。與此同時,網際網路雲端計算的規模不但沒有縮減,反而更加龐大。這就給雲端計算的網路帶來了巨大的壓力。
圖1. 網際網路雲端計算的業務特點
l 大容量的MAC表項和ARP表項
虛擬化會導致更大的MAC表項。假設一個網際網路雲端計算中心的伺服器有5000臺,按照1:20的比例進行虛擬化,則有10萬個虛擬機器。通常每個虛擬機器會配置兩個業務網口,這樣這個雲端計算中心就有20萬個虛擬網口,對應的就是需要20萬個MAC地址和IP地址。雲端計算要求資源靈活排程,業務資源任意遷移。也就是說任意一個虛擬機器可以在整個雲端計算網路中任意遷移。這就要求全網在一個統一的二層網路中。全網任意交換機都有可能學習到全網所有的MAC表項。與此對應的則是,目前業界主流的接入交換機的MAC表項只有32K,基本無法滿足網際網路雲端計算的需求。另外,閘道器需要記錄全網所有主機、所有網口的ARP資訊。這就需要閘道器裝置的有效ARP表項超過20萬。大部分的閘道器裝置晶片都不具備這種能力。
l 4K VLAN Trunk問題
傳統的大二層網路支援任意VLAN的虛擬機器遷移到網路的任意位置,一般有兩種方式。方式一:虛擬機器遷移後,通過自動化網路管理平臺動態的在虛擬機器對應的所有埠上下發VLAN配置;同時,還需要動態刪除遷移前虛擬機器對應所有埠上的VLAN配置。這種方式的缺點是實現非常複雜,同時自動化管理平臺對多廠商裝置還面臨相容性的問題,所以很難實現。方式二:在雲端計算網路上靜態配置VLAN,在所有埠上配置VLAN trunk all。這種方式的優點是非常簡單,是目前主流的應用方式。但這也帶來了巨大的問題:任一VLAN內如果出現廣播風暴,則全網所有VLAN內的虛擬機器都會受到風暴影響,出現業務中斷。
l 4K VLAN上限問題
雲端計算網路中有可能出現多租戶需求。如果租戶及業務的數量規模超出VLAN的上限(4K),則無法支撐客戶的需求。
l 虛擬機器遷移網路依賴問題
VM遷移需要在同一個二層域內,基於IP子網的區域劃分限制了二層網路連通性的規模。
1.2 資料中心現有的物理網路,無法滿足雲端計算SDN的要求
站著使用角度去考慮,比如我們使用阿里雲
一方面:每個申請阿里雲的人或組織都是一個獨立的租戶,而每個申請者自以為自己獨享的網路資源,實際上是與其他申請者共享阿里雲的物理網路,這就需要阿里雲做好租戶與租戶直接的隔離,這是一個很重要的方面,顯然,資料中心現有的物理網路無法滿足需求: 資料中心現有的物理網路是固定的,需要手動配置的,單一的。
另一方面:就是自服務,試想,我們作為阿里雲的使用者,完全可以構建自己的網路環境,這就需要雲環境對租戶提供API,從而滿足租戶基於雲端計算虛擬出來的網路之上來設計、部署租戶自己需要的網路架構。
所以總結下來,雲端計算SDN的需求無非兩點:
一:租戶“共享同一套物理網路”並且一定要實現“互相隔離”
二:自服務
1.3 小結
總結1.1和1.2:
- 其實很明顯的可以看出來,無論是1.1還是1.2的問題,都指向了同一點:資料中心現有的物理網路好使,不夠6。如何解決呢?
- 簡答地說,就是在資料中心現有的物理網路基礎之上疊加一層我們自己的虛擬網路
二 如何解決問題:Neutron實現網路虛擬化
2.1 Neutron元件介紹
neutron包含元件:
neutron-server
neutron-plugin
neutron-agent
neutron各元件功能介紹:
1.Neutron-server可以理解為一個專門用來接收Neutron REST API呼叫的伺服器,然後負責將不同的rest api分發到不同的neutron-plugin上。
2.Neutron-plugin可以理解為不同網路功能實現的入口,各個廠商可以開發自己的plugin。Neutron-plugin接收neutron-server分發過來的REST API,向neutron database完成一些資訊的註冊,然後將具體要執行的業務操作和引數通知給自身對應的neutron agent。
3.Neutron-agent可以直觀地理解為neutron-plugin在裝置上的代理,接收相應的neutron-plugin通知的業務操作和引數,並轉換為具體的裝置級操作,以指導裝置的動作。當裝置本地發生問題時,neutron-agent會將情況通知給neutron-plugin。
4.Neutron database,顧名思義就是Neutron的資料庫,一些業務相關的引數都存在這裡。
5.Network provider,即為實際執行功能的網路裝置,一般為虛擬交換機(OVS或者Linux Bridge)。
neutron-plugin分為core-plugin和service-plugin兩類。
Core-plugin,Neutron中即為ML2(Modular Layer 2),負責管理L2的網路連線。ML2中主要包括network、subnet、port三類核心資源,對三類資源進行操作的REST API被neutron-server看作Core API,由Neutron原生支援。其中:
Service-plugin,即為除core-plugin以外其它的plugin,包括l3 router、firewall、loadbalancer、VPN、metering等等,主要實現L3-L7的網路服務。這些plugin要操作的資源比較豐富,對這些資源進行操作的REST API被neutron-server看作Extension API,需要廠家自行進行擴充套件。
“Neutron對Quantum的外掛機制進行了優化,將各個廠商L2外掛中獨立的資料庫實現提取出來,作為公共的ML2外掛儲存租戶的業務需求,使得廠商可以專注於L2裝置驅動的實現,而ML2作為總控可以協調多廠商L2裝置共同執行”。在Quantum中,廠家都是開發各自的Service-plugin,不能相容而且開發重複度很高,於是在Neutron中就為設計了ML2機制,使得各廠家的L2外掛完全變成了可插拔的,方便了L2中network資源擴充套件與使用。
(注意,以前廠商開發的L2 plugin跟ML2都存在於neutron/plugins目錄下,而可插拔的ML2裝置驅動則存在於neutron/plugins/ml2/drivers目錄下)
ML2作為L2的總控,其實現包括Type和Mechanism兩部分,每部分又分為Manager和Driver。Type指的是L2網路的型別(如Flat、VLAN、VxLAN等),與廠家實現無關。Mechanism則是各個廠家自己裝置機制的實現,如下圖所示。當然有ML2,對應的就可以有ML3,不過在Neutron中L3的實現只負責路由的功能,傳統路由器中的其他功能(如Firewalls、LB、VPN)都被獨立出來實現了,因此暫時還沒有看到對ML3的實際需求。
一般而言,neutron-server和各neutron-plugin部署在控制節點或者網路節點上,而neutron agent則部署在網路節點上和計算節點上。我們先來分析控制端neutron-server和neutron-plugin的工作,然後再分析裝置端neutron-agent的工作。
neutron新進展(dragon flow):
https://www.ustack.com/blog/neutron-dragonflow/
2.2 Neturon網路虛擬化簡介
==================part1==================
想要了解openstack的虛擬化網路,必先知道承載openstack虛擬化網路的物理網路
在實際的資料中心中,與openstack相關的物理網路可以分為三層:
- OpenStack Cloud network:OpenStack 架構的網路
- 機房intranet (external network):資料中心所管理的的公司網(Intranet) ,虛機使用的 Floating IP 是這個網路的地址的一部分。
- 以及真正的外部網路即 Internet:由各大電信運營商所管理的公共網路,使用公共IP。
External 網路和Internet 之間是資料中心的 Uplink 路由器,它負責通過 NAT 來進行兩個網路之間的IP地址(即 floating IP 和 Internet/Public IP)轉換,因此,這部分的控制不在 OpenStack 控制之下,我們無需關心它。
openstack架構的網路--->機房的網路external-----(NAT)--->外網internet
==================part2==================
openstack架構的網路又可細分為以下幾種(下述指的仍然是物理網路):
- 管理網路:包含api網路(public給外部用,admin給管理員用-是內部ip,internal給內部用-是內部ip)
- 資料網路
- 儲存網路
- IDRAC網路
- PXE網路
資料網路主要用於vm之間的通訊,這部分是neutron所實現網路虛擬化的核心,neutron基於該物理網路之上,來實現滿足多租戶要求的虛擬網路和服務。
==================part3==================
Neutron 提供的網路虛擬化能力包括:
(1)二層到七層網路的虛擬化:L2(virtual switch)、L3(virtual Router 和 LB)、L4-7(virtual Firewall )等
(2)網路連通性:二層網路和三層網路
(3)租戶隔離性
(4)網路安全性
(4)網路擴充套件性
(5)REST API
(6)更高階的服務,包括 LBaaS,FWaaS,VPNaaS 等。具體以後再慢慢分析。
==================part4==================
Neutron主要為租戶提供虛擬的
1. 交換機(switch)
2. 網路(L2 network)和子網(subnet),
3. 路由器(router)
4. 埠(port)
2.3 構建大二層網路:虛擬交換機(switch)+物理交換機
1. 什麼是二層網路?
二層指的是資料鏈路層,計算機與計算機之間的通訊採用的是基於乙太網協議廣播的方式,請參考http://www.cnblogs.com/linhaifeng/articles/5937962.html
2. 什麼是大二層網路?
大二層的概念指的是openstack中所有的vm都處於一個大的二層網路中,大二層也可以被想象成一堆二層交換機串聯到一起。
3. 為什麼要構建大二層網路?
構建大二層網路的目的就是為了滿足vm可以遷移到全網的任意位置。二層無需閘道器,無需路由,因而資源呼叫更加靈活,反之,如果所有vm不在一個大二層中,那麼vm遷移到另外一個位置(另外一個網路中),則需要我們人為地指定閘道器,新增路由策略,然而這還只是針對一臺vm的遷移,要滿足所有的vm的動態遷移,再去指定閘道器、路由等就不現實了。
4. 如何構建大二層網路?
一些列二層裝置串聯起來,組成一個大二層網路,在openstack中二層裝置分為:物理的二層裝置和虛擬機器的二層裝置
虛擬的二層裝置又分為:
1. Neutron 預設採用的 開源Open vSwitch 建立的虛機交換機
2. Linux bridge。
需要特別強調的是:
1.大二層網路是由虛擬二層裝置和物理二層裝置共同組成的;
2.而這裡面所有的二層裝置合在一起相當於一個大的交換機;
3.大二層網路是在計算節點或者網路節點啟動時就會建立,而後期使用者建立的網路,都是在此網路的基礎之上進行邏輯劃分,使用者每新建一個網路都被分配相應的段ID(相當於vlan id)
2.4 大二層網路建立完畢後,使用者如何使用?->網路(L2 network)、子網(subnet)
==================part1:使用者建立的L2 network==================
雲平臺在構建完畢後,即在物理節點都正常啟動後,大二層網路也就建立好了,對使用者來說,此時相當於一臺大的二層交換機擺在面前,即使用者建立網路就是把整個大二層網路當成一個交換機
然後使用者需要做的是基於該網路劃分自己的vlan,即建立一個l2 network,
例如:使用者(例如demo使用者)可以在自己的project下建立網路(L2 network),該網路就是在大二層的基礎上劃分出來的,是一個隔離的二層網段。類似於物理網路世界中的虛擬 LAN (VLAN),每建立一個l2 network,都會被分配一個段ID,該段ID標識一個廣播域,這個ID是被隨機分配的,除非使用管理員身份在管理員選單下,才可以手動指定該ID
那麼就讓我們在demo租戶下以demo使用者身份建立demo-net網路:
以admin使用者登入,這樣才能看到新建網路demo-net的段ID,其實此時demo-net僅僅只是一種邏輯上劃分
補充:使用管理員身份在管理員選單下,建立網路可以手動指定段ID
========part2:使用者為自己新建的l2 network,即demo-net,建立子網==========
子網是一組 IPv4 或 IPv6 地址以及與其有關聯的配置。它是一個地址池,OpenStack 可從中向虛擬機器 (VM) 分配 IP 地址。每個子網指定為一個無類別域間路由 (Classless Inter-Domain Routing) 範圍,必須與一個網路相關聯。除了子網之外,租戶還可以指定一個閘道器、一個域名系統 (DNS) 名稱伺服器列表,以及一組主機路由。這個子網上的 VM 例項隨後會自動繼承該配置。
在 OpenStack Kilo 版本之前,使用者需要自己輸入 CIDR。Kilo 版本中實現了這個 Blueprint,使得 Neutron 能夠從使用者指定的 CIDR Pool 中自動分配 CIDR。
檢視新建子網的資訊
建立的結果:就好比我們拿來一臺“交換機”分出了一個VLAN.
注:在AWS中,該概念對應其 Subnet 概念。AWS 對 Subnet 的數目有一定的限制,預設地每個 VPC 內最多隻能建立 200 個 Subnet。從CIDR角度看,一個 VPC 有一個比較大的網段,其中的每個 Subnet 分別擁有一個較小的網段。這種做法和OpenStack 有區別,OpenStack 中建立網路時不需要指定 CIDR。
========part3:dhcp-agent服務於網路demo-net下的子網demo-subnet==========
在建立了子網後,會在網路節點上新增一個名稱空間用來執行dhcp-agent專門為demo-net下的demo-subnet分配ip
demo-net有一個段ID:51
對應大二層網路上的變化為:在網路節點上新增dhcp-agent,在網路節點上的br-int新增埠,該埠的屬於demo-net,及屬於段ID:51
ps:新建子網後,便會網路節點新增dhcp-agent(解釋一下:圖中虛擬機器是新建虛擬機器後才有的)
在demo-net新增一個子網的話,不會新增dhcp-agent,會新增地址池
總結:
DHCP 服務是網路環境中必須有的。Neutron 提供基於 Dnamasq (輕型的dns和dhcp服務)實現的虛機 DHCP 服務,向租戶網路內的虛機動態分配固定 IP 地址。它具有以下特性:
- 一個網路可以有多個執行在不同物理網路節點上的 DHCP Agent,同時向網路內的虛機提供服務
- 一個 DHCP Agent 只屬於一個網路,在網路節點上執行在一個 network namespace 內
- 網路內的子網共享該 DHCP Agent
========part4:新建vm1和vm2連線到demo-net==========
在demo-net以及demo-subnet建立成功後,就可以新建虛擬機器連線到demo-net了,相當於同一個vlan中的倆臺虛擬機器,二層互通
此處我們新建vm1和vm2,網路拓撲如下
========part4:新建網路demo-net1,與demo-net對比========
按照同樣的套路建立demo-net1,它與demo-net是隔離的
對應大二層網路的埠連線連線
這裡所謂的隔離,可以理解為幾個含義:
- 每個網路使用自己的 DHCP Agent,每個 DHCP Agent 在一個 Network namespace 內
- 不同網路內的IP地址可以重複(overlapping)
- 跨網路的子網之間的流量必須走 L3 Virtual Router
2.5 虛擬機器路由器(Vitual Router)
要想讓demo-net1上的vm3與demo-net上的vm2通訊,使用者必須建立連線這兩個網路的路由器router
新增介面
檢視網路拓撲
對應大二層網路的變化
測試來自demo-net的vm2:172.16.45.6與demo-net1的vm3:172.16.18.3的連通性
要想連線外網,需要用管理員身份,建立與外部網路繫結的網路,然後將demo租戶下的test-router的閘道器指定為該網路
網路拓撲
測試:
總結:一個 Virtual router 提供不同網段之間的 IP 包路由功能,由 Nuetron L3 agent 負責管理。
2.6 埠(Port)
一個 Port 代表虛擬網路交換機(logical network switch)上的一個虛機交換埠(virtual switch port)。虛機的網絡卡(VIF - Virtual Interface)會被連線到 port 上。當虛機的 VIF 連線到 Port 後,這個 vNIC 就會擁有 MAC 地址和 IP 地址。Port 的 IP 地址是從 subnet 中分配的。
三 實現網路虛擬化的關鍵:如何構建虛擬的大二層網路
根據建立網路的使用者的許可權,Neutron L2 network 可以分為:
- Provider network:管理員建立的和物理網路有直接對映關係的虛擬網路。
- Tenant network:租戶普通使用者建立的網路,物理網路對建立者透明,其配置由 Neutron根據管理員在系統中的配置決定。
虛機可以直接掛接到 provider network 或者 tenant network 上 “VMs can attach directly to both tenant and provider networks, and to networks with any provider:network_type value, assuming their tenant owns the network or its shared.”。
根據網路的型別,Neutron L2 network 可以分為:
- Flat network:基於不使用 VLAN 的物理網路實現的虛擬網路。每個物理網路最多隻能實現一個虛擬網路。
- local network(本地網路):一個只允許在本伺服器內通訊的虛擬網路,不知道跨伺服器的通訊。主要用於單節點上測試。
- VLAN network(虛擬區域網) :基於物理 VLAN 網路實現的虛擬網路。共享同一個物理網路的多個 VLAN 網路是相互隔離的,甚至可以使用重疊的 IP 地址空間。每個支援 VLAN network 的物理網路可以被視為一個分離的 VLAN trunk,它使用一組獨佔的 VLAN ID。有效的 VLAN ID 範圍是 1 到 4094。
- GRE network (通用路由封裝網路):一個使用 GRE 封裝網路包的虛擬網路。GRE 封裝的資料包基於 IP 路由表來進行路由,因此 GRE network 不和具體的物理網路繫結。
- VXLAN network(虛擬可擴充套件網路):基於 VXLAN 實現的虛擬網路。同 GRE network 一樣, VXLAN network 中 IP 包的路由也基於 IP 路由表,也不和具體的物理網路繫結。
注:在AWS中,該概念對應 VPC 概念。AWS 對 VPC 的數目有一定的限制,比如每個賬戶在每個 region 上預設最多隻能建立 5 個VPC,通過特別的要求最多可以建立 100 個。
L2 network之Provider與Tenant的區別
- Provider network 是由 Admin 使用者建立的,而 Tenant network 是由 tenant 普通使用者建立的。
- Provider network 和物理網路的某段直接對映,比如對應某個 VLAN,因此需要預先在物理網路中做相應的配置。而 tenant network 是虛擬化的網路,Neutron 需要負責其路由等三層功能。
- 對 Flat 和 VLAN 型別的網路來說,只有 Provider network 才有意義。即使是這種型別的 tenant network,其本質上也是對應於一個實際的物理段。
- 對 GRE 和 VXLAN 型別的網路來說,只有 tenant network 才有意義,因為它本身不依賴於具體的物理網路,只是需要物理網路提供 IP 和 組播即可。
- Provider network 根據 admin 使用者輸入的物理網路引數建立;而 tenant work 由 tenant 普通使用者建立,Neutron 根據其網路配置來選擇具體的配置,包括網路型別,物理網路和 segmentation_id。
- 建立 Provider network 時允許使用不在配置項範圍內的 segmentation_id。
3.2 依賴物理的二層來建立虛擬的大二層(vlan模式)
物理的二層指的是:物理網路是二層網路,基於乙太網協議的廣播方式進行通訊
虛擬的二層指的是:neutron實現的虛擬的網路也是二層網路(openstack的vm機所用的網路必須是大二層),也是基於乙太網協議的廣播方式進行通訊,但毫無疑問的是該虛擬網路依賴於物理的二層網路
物理二層+虛擬二層的典型代表:vlan網路模式,點選進入詳解
3.3 依賴物理的三層來建立虛擬的大二層(gre模組與vxlan模式)
物理的三層指的是:物理網路是三層網路,基於ip路由的方式進行通訊
虛擬的二層指的是:neutron實現的虛擬的網路仍然是二層網路(openstack的vm機所用的網路必須是大二層),仍然是基於乙太網協議的廣播方式進行通訊,但毫無疑問的是該虛擬網路依賴於物理的三層網路,這有點類似於VPN的概念,根本原理就是將私網的包封裝起來,最終打上隧道的ip地址傳輸。
物理三層+虛擬二層的典型代表:gre模式與vxlan模式,點選進入詳解
相關推薦
一:Neutron實現網路虛擬化
一 雲端計算時代資料中心物理網路的問題 資料中心虛擬化成為了趨勢,最典型的場景莫過於:對資料中心的伺服器進行虛擬化,來提高資源利用率,同時降低單位能耗。 但是,隨著資料中心虛擬化程度的不斷提高、虛擬化伺服器規模的不斷擴大,帶來了巨大的管理壓力。===>這正是雲端計算誕生的原因。
Android RxJava 實戰系列:優雅實現 網路請求巢狀回撥
轉自-----http://blog.csdn.net/carson_ho/article/details/78315696,請為大神打call 前言 Rxjava,由於其基於事件流的鏈式呼叫、邏輯簡潔 & 使用簡單的特點,深受各大 Android
Android RxJava 實戰講解:優雅實現 網路請求輪詢
轉自-----http://blog.csdn.net/carson_ho/article/details/78256466 前言 Rxjava,由於其基於事件流的鏈式呼叫、邏輯簡潔 & 使用簡單的特點,深受各大 Android開發者的歡迎。
網路程式設計懶人入門(一):快速理解網路通訊協議(上篇)
1、寫在前面 論壇和群裡常會有技術同行打算自已開發IM或者訊息推送系統,很多時候連基本的網路程式設計理論(如網路協議等)都不瞭解,就貿然定方案、寫程式碼,顯得非常盲目且充滿技術風險。即時通訊網論壇裡精心整理了《[通俗易懂]深入理解TCP協議》、《不為人知的網路程式設計》、《
記一次銳捷網路虛擬化(VSU)故障處理
故障現象: 網路部署VSU之後,整體網路變慢。嚴重影響業務系統使用。 故障分析和處理 使用者網路環境:兩臺銳捷8600系列核心交換機做VSU,伺服器區是兩臺匯聚交換機做VSU。 伺服器全部連結在伺服器匯聚交換機上。首先我們排查是否是匯聚交換機出現故障,將
Android筆記(一):ViewDragHelper實現底部上滑同時底部下滑
先看看效果圖: 自定義佈局控制元件: public class DragLayout extends FrameLayout { private int title; //限制上滑後的頂部標題高度大小 private Status mStatus
深入理解Neutron -- OpenStack網路實現:VLAN模式
網路節點 類似GRE模式下,br-eth1收到到達的網包,int-br-eth1和phy-br-eth1上分別進行vlan轉換,保證到達br-int上的網包都是帶有內部vlan tag,到達br-eth1上的都是帶有外部vlan tag。br-ex則完成到OpenStack以外網路的連線。檢視網橋資訊,包
TensorFlow練手專案一:使用迴圈神經網路(RNN)實現影評情感分類
使用迴圈神經網路(RNN)實現影評情感分類 作為對迴圈神經網路的實踐,我用迴圈神經網路做了個影評情感的分類,即判斷影評的感情色彩是正面的,還是負面的。 選擇使用RNN來做情感分類,主要是因為影評是一段文字,是序列的,而RNN對序列的支援比較好,能夠“記憶”前
Neutron 理解 (1): Neutron 所實現的網路虛擬化 [How Neutron Virtualizes Network]
學習 Neutron 系列文章: 1. 為什麼要網路虛擬化? 個人認為,這裡主要有兩個需求:一個是資料中心的現有網路不能滿足雲端計算的物理需求;另一個是資料中心的現有網路不能滿足雲端計算的軟體化即SDN要求。 1.1 現有物理網路不能
Neutron 理解 (1): Neutron 所實現的虛擬化網路 [How Netruon Virtualizes Network]
1. 為什麼要網路虛擬化? 個人認為,這裡主要有兩個需求:一個是資料中心的現有網路不能滿足雲端計算的物理需求;另一個是資料中心的現有網路不能滿足雲端計算的軟體化即SDN要求。 1.1 現有物理網路不能滿足雲端計算的需求 網際網路行業資料中心的基本特徵就是伺服
WSWP(用python寫網路爬蟲)筆記 一:實現簡單爬蟲
wswp中的程式碼是通過python2的語法來寫的,在學習的過程中個人比較喜歡python3,因此準備將wswp的示例程式碼用python3重寫一遍,以加深映像。 開始嘗試構建爬蟲 識別網站所用技術和網站所有者 構建網站所使用的技術型別的識別和尋找
DICOM:docker實現DICOM服務虛擬化
var 博文 fadein blue 共享文件 ads ren split lines 背景: docker,是一個開源的應用容器引擎,眼下大多應用在部署和運維領域,然而因為全然使用沙箱機制,相互之間能夠看做獨立的主機,且自身對資源的需求也十分有限。遠
題目一:使用Java實現二維數組中的查找
ray class 如果 strong www. 循環 順序 選擇 com 考點:數組 題目:二維數組中的查找 描述:在一個二維數組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,
SpringBoot系列十一:SpringBoot整合Restful架構(使用 RestTemplate 模版實現 Rest 服務調用、Swagger 集成、動態修改日誌級別)
attribute tar ring 動態修改 包含 分布式 restfu pen 負載 1、概念:SpringBoot整合Restful架構 2、背景 Spring 與 Restful 整合才是微架構的核心,雖然在整個 SpringBoot(SpringCloud)之中提
分布式數據庫中間件的實現原理介紹一:分庫分表【轉】
介紹 com CA 擴展 png HA 不同 訂單號 order 聲明:本文並非原創,轉自華為雲幫助中心的分布式數據庫中間件(DDM)服務的產品介紹。 分片是解決數據庫存儲容量限制的直接途徑。分片包括垂直分片與水平分片兩種方式。 垂直分片 垂直分片又叫縱向分割,
深入理解Lua的閉包一:概念、應用和實現原理
觀點 數組 line Language 場景 test 詞法 nil 實參 本文首先通過具體的例子講解了Lua中閉包的概念,然後總結了閉包的應用場合,最後探討了Lua中閉包的實現原理。 閉包的概念 在Lua中,閉包(closure)是由一個函數和該函數會訪問到的
JQuery案例一:實現表格隔行換色
body ble () ++ doc cti seo head 姓名 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <t
Spring Data JPA 一:實現多表關聯查詢
多表查詢在spring data jpa中有兩種實現方式,第一種是利用hibernate的級聯查詢來實現,第二種是建立一個結果集的介面來接收連表查詢後的結果,這裡介紹第二種方式。 一、一對一對映 實體 UserInfo :使用者。 實體 Address:家庭住址。 這裡通過外來鍵的方
快速傅立葉變換FFT的學習筆記一:C語言程式碼的簡單實現
快速傅立葉變換FFT的學習筆記一:C語言程式碼的簡單實現 fft.c #include "math.h" #include "fft.h" void conjugate_complex(int n,complex in[],complex out[]) { int i = 0
簡單直播實現(一:建立本地rtmp伺服器)Mac上搭建直播伺服器Nginx+rtmp
簡介 nginx是非常優秀的開源伺服器,用它來做hls或者rtmp流媒體伺服器是非常不錯的選擇,本人在網上整理了安裝流程,分享給大家並且作備忘。 步驟安裝 1、安裝Homebrow Homebrew簡稱brew,是Mac OSX上的軟體包管理工具,能在Mac中方便的安裝軟體