搭建微伺服器
1. 什麼是微服務架構主流的微服務如何實現
簡單地說,微服務架構就是以業務域或業務功能為邊界,將一個大而全的應用拆分為可以獨立開發,獨立部署,獨立測試,獨立運行的一組小的應用,並且使用輕量級,通用的機制在這組應用間進行通信。
主流的微服務包括:
1、SpringCloud
Spring Cloud , 來自Spring,具有Spring 社區的強大支撐,還有Netflix強大的後盾與技術輸出。Netflix作為一家成功實踐微服務架構的互聯網公司在幾年前就把幾乎整個微服務框架棧開源貢獻給了社區,這些框架開源的整套服務架構套件是Spring Cloud的核心。
- Eureka:服務注冊發現框架;
- Zuul:服務網關;
- Karyon:服務端框架;
- Ribbon:客戶端框架;
- Hystrix:服務容錯組件;
- Archaius:服務配置組件;
- Servo:Metrics組件;
- Blitz4j:日誌組件;
2、Dubbo
Dobbo是一個分布式服務框架,是阿里開放的微服務化治理框架,致力於提高性能和透明化的RPC遠程服務調用方案,以及SOA服務治理方案。其核心部分(官網)
- 遠程通訊: 提供對多種基於長連接的NIO框架抽象封裝,包括多種線程模型,序列化,以及「請求-響應」模式的信息交換方式;
- 集群容錯: 提供基於介面方法的透明遠程過程調用,包括多協議支持,以及軟負載均衡,失敗容錯,地址路由,動態配置等集群支持;
- 自動發現: 基於注冊中心目錄服務,使服務消費方能動態的查找服務提供方,使地址透明,使服務提供方可以平滑增加或減少機器。
Dubbo 也是採用全 Spring 配置方式,透明化接入應用,對應用沒有任何 API 侵入,只需用 Spring 載入 Dubbo的配置即可,Dubbo 基於 Spring 的 Schema 擴展進行載入。當然也支持官方不推薦的 API 調用方式。
3、lstio
lstio 作為用於微服務聚合層管理的新銳項目,是Google、IBM、Lyft(海外共享出行公司、Uber勁敵),首個共同聯合開源的項目,提供了統一的連接,安全,管理和監控微服務的方案。
目前首個測試版是針對Kubernetes環境的,社區宣稱在未來幾個月內會為虛擬機和Cloud Foundry 等其他環境增加支持。lstio將 流量管理添加到微服務中,並為增值功能(如安全性、監控、路由、連接管理和策略)創造了基礎。
- HTTP、gRPC 和 TCP 網路流量自動負載均衡;
- 提供了豐富的路由規則,實現細顆粒度的網路流量行為控制;
- 流量加密、服務件認證,以及強身份聲明;
- 全范圍(Fleet-wide)的策略執行;
- 深度遙測和報告。
2. win10和sever搭建web伺服器哪個好
一般來說windows的server版穩定性一定要比個人版的操作系統要好,不過由於內核都差不多,如果僅僅是搭建web伺服器的話,效果都差不多。我認為更應該考慮web伺服器的選擇,如果是.net就用IIS,如果是java開發大多數還是用tomcat,如果需要微服務還得用docker。
3. 如何規劃基於docker的微服務架構技術棧
【編者的話】有些開發者可能還是不明白Docker對自己到底有多大的用處,因此翻譯Docker個人用例這篇文章中來介紹Docker在普通開發者開發過程中的用例。Docker如今贏得了許多關注,很多人覺得盛名之下其實難副,因為他們仍然搞不清Docker和普通開發者到底有什麼關系。許多開發者覺得Docker離自己很遠,Docker是生產環境中的工具,和自己無關。我也是花了很長時間才想清楚作為普通開發人員如何在自己的開發中使用Docker。坦率地說,我仍處在學習的過程中。這篇文章提供了一個Docker用例列表,我希望它能更好地幫助你理解Docker並引發你的思考。本文只是描述Docker在普通開發者日常的應用,並不提供完整的解決方案。在介紹用例之前,我希望你能先記住這句話:「Docker是一個便攜的應用容器」。你可以不知道Docker所說的的「攜帶型容器」到底是什麼意思,但是你必須清楚Docker在日常中能帶來非常大的效率提升。當你需要在容器內運行自己的應用(當然可以是任何應用),Docker都提供了一個基礎系統鏡像作為運行應用時的基礎系統。也就是說,只要是linux系統上的應用都可以運行在Docker中。可以在Docker裡面運行資料庫嗎?當然可以。可以在Docker裡面運行Node.js網站伺服器嗎?當然可以。可以在Docker裡面運行API伺服器嗎?當然可以。Docker並不在乎你的應用程序是什麼、做什麼,Docker提供了一組應用打包、傳輸和部署的方法,以便你能更好地在容器內運行任何應用。下面的例子我自己經常使用,當然你有更好的案例也可以分享給我。嘗試新軟體對開發者而言,每天會催生出的各式各樣的新技術都需要嘗試,然而開發者卻不太可能為他們一一搭建好環境並進行測試。時間非常寶貴,正是得益於Docker,讓我們有可能在一條或者幾條命令內就搭建完環境。Docker有一個傻瓜化的獲取軟體的方法,Docker後台會自動獲得環境鏡像並且運行環境。並不僅僅是新技術環境搭建用得到Docker。如果你想快速在你的筆記本上運行一個Mysql資料庫,或者一個Redis消息隊列,那麼使用Docker便可以非常容易地做到。例如Docker只需要一條命令便可以運行MySQL資料庫:dockerrun-d-p3306:3306tutum/mysql。譯者註:雖然使用命令也能非常快地安裝MySQL資料庫,但是當用到最新的技術或者非常復雜的技術時,使用Docker便會是個非常好的選擇,例如Gitlab,普通用戶大概需要一天的時間去搭建Gitlab平台,而Docker則只需要一條命令。進行演示現在我經常需要在周末用自己開發的成果對客戶活著別人做一兩個演示。搭建演示環境的過程非常麻煩。現在我發現Docker已經成為我演示這些工具的最合理的方式。同時,對於客戶來說,我可以直接將Docker鏡像提供給他們,而不必去做任何環境配置的工作,工作的效果也會和在他們演示中所看到的一模一樣,同時不必擔心他們的環境配置會導致我們的產品無法運行。避免「我機器上可以運行」無論是上一篇介紹的企業部署Docker還是本文的個人Docker用例,都提到了這個情況。因為環境配置不同,很多人在開發中也會遇到這個情況,甚至開發的軟體到了測試人員的機器上便不能運行。但這都不是重點。重點是,如果我們有一個可靠的、可分發的標准開發環境,那麼我們的開發將不會像現在這么痛苦。Docker便可以解決這個問題。Docker鏡像並不會因為環境的變化而不能運行,也不會在不同的電腦上有不同的運行結果。可以給測試人員提交含有應用的Docker鏡像,這樣便不再會發生「在我機器上是可以運行的」這種事情,很大程度上減輕了開發人員測試人員互相檢查機器環境設置帶來的時間成本。另一個Docker可以發揮用處的地方是培訓班。除了Docker容器的隔離性之外,更能體會到Docker優勢的地方在於環境搭建。培訓班的新手每個人都要在環境搭建上花費很多時間,但是如果在這里應用到Docker的話,那麼我們只需要把標準的運行環境鏡像分發下去,然後就可以開始上課了。使用Docker和使用虛擬機一樣簡單,但是Docker要更方便、更輕量級。同時,我們也可以告訴學員:「在培訓的同時,我們還將學到當下最流行的技術——Docker」,這種雙贏的結局,何樂而不為呢。學習Linux腳本當然這個原因看起來可能很奇怪,但是對不不熟悉Linux操作系統和Shell腳本的人來說,確實是一個好機會。即便本文並不是在講Linux,Linux的重要度仍然不言而喻。如果你用的是Windows,那麼我給你一個建議:從雲主機提供商那兒租用一台雲主機:我推薦使用CoreOS系統的雲主機。雖然這樣並不會讓你成為專業的Linux運維,但是可以讓你快速地學到Linux基礎知識,愛上命令行操作,並且慢慢開始熟悉和欣賞Linux。更好地利用資源虛擬機的粒度是「虛擬出的機器」,而Docker的粒度則是「被限制的應用」,相比較而言Docker的內存佔用更少,更加輕量級。對我來說這是Docker的一個優勢:因為我經常在自己電腦中運行多個Docker應用,使用Docker比使用虛擬機更加簡單,方便,粒度更細,也能持續地跟蹤容器狀態。為微服務定製如果你一直在關注科技新聞的話,那麼你應該聽說過「微服務(Microservices)」的概念。Docker可以很好地和微服務結合起來。從概念上來說,一個微服務便是一個提供一整套應用程序的部分功能,Docker便可以在開發、測試和部署過程中一直充當微服務的容器。甚至生產環境也可以在Docker中部署微服務。在雲服務提供商之間移植大多數的雲主機提供商已經全面支持Docker。對於開發人員來說,這表示你可以很方便地切換雲服務提供商,當然也可以很方便地將你本地的開發環境移動到雲主機上,不需要本地上配置一次運行環境、在雲主機上還配置一次運行環境。全面部署Docker(DockerhereandDockerthere)作為標准運行環境可以極大地減輕應用上線時的工作量和產生BUG。
4. 私有雲怎麼搭建
新一代私有雲並非私有雲的一個新版本,相反,它通過軟體定義硬體、軟體和硬體解耦、軟體可進化、硬體可升級的OTA(Over The Air)特色,通過可進化這一核心要點實現了私有雲的無版本化永續生命周期,以及從IaaS到PaaS場景化的能力邊界突破。
新一代私有雲產品是基於kubernetes的微服務架構,一體化的設計理念,幫助企業用戶從最基礎單元的3節點雲就緒超融合到無上限的超大規模雲平台實現了統一架構,在基於開源生態技術棧的同時,保持高度產品化體驗,通過業務無感知,數據不遷移,服務不中斷的平滑無感可進化方式,構建以數據為中心、面向多雲的私有雲平台。
易捷行雲2018年和2019年蟬聯中國中立私有雲市場份額第一名,並在2019年獲得中國最大國有IT央企——中國電子信息產業集團D輪戰略投資,成為雲計算國家隊。作為中國電子體系中唯一一家雲計算企業,在信創領域具有獨特價值。
1.創新基因:易捷行雲創始團隊來自於IBM中國研發團隊,是中國乃至全球最早一批從事開源雲計算技術的技術人員。
2.技術領先:易捷行雲積極參與國際開源社區並貢獻核心代碼,不僅是OpenStack基金會黃金會員,Ceph基金會創始會員,CNCF、OCF、Linux基金會會員,擁有OpenStack全球技術委員會亞太國家中唯一委員;同時在kubernetes、Ceph、OpenStack的核心代碼貢獻中多次排名全球前十。
3.市場地位:中國中立私有雲排名第一:全球咨詢機構IDC 2018年和2019年中國雲系統軟體市場報告,易捷行雲蟬聯中國中立私有雲企業第一名。OpenStack全球八強:全球咨詢機構Gartner 2017年OpenStack雲計算競爭力報告,易捷行雲和華為代表中國企業一同躋入全球八強。
4.易捷行雲擁有中國廣泛的國產化雲生態環境,不僅支持海光、飛騰、鯤鵬、龍芯等主流國產處理器,還支持麒麟軟體、統信軟體、中科方德、凝思磐石、中標普華、華為歐拉等國產操作系統,打造多雲異構的全國產化信創雲平台;並在資料庫、大數據、數據保護、安全、辦公和行業應用軟體等領域擁有超過100家國產合作夥伴,構建完整的國產化雲生態圖譜。
5.國際化進程:已經為1000+家國內外大中型企業提供雲平台和服務。客戶涵蓋政務雲、應急雲、金融雲、交通雲、能源雲、工業雲、教育雲、醫療雲等,並布局一帶一路和東南亞地區,服務安哥拉國家公共安全一體化平台、東信港寮國雲計算中心、印尼運營商CBN Cloud、新加坡南洋理工大學等國際客戶。
5. 微服務架構是什麼
微服務架構是一項在雲中部署應用和服務的新技術。
大部分圍繞微服務的爭論都集中在容器或其他技術是否能很好的實施微服務,而紅帽說API應該是重點。
微服務架構相關介紹:
微服務可以在「自己的程序」中運行,並通過「輕量級設備與HTTP型API進行溝通」。關鍵在於該服務可以在自己的程序中運行。通過這一點我們就可以將服務公開與微服務架構(在現有系統中分布一個API)區分開來。
在服務公開中,許多服務都可以被內部獨立進程所限制。如果其中任何一個服務需要增加某種功能,那麼就必須縮小進程范圍。在微服務架構中,只需要在特定的某種服務中增加所需功能,而不影響整體進程的架構。
微服務不需要像普通服務那樣成為一種獨立的功能或者獨立的資源。定義中稱,微服務是需要與業務能力相匹配,這種說法完全正確。不幸的是,仍然意味著,如果能力模型粒度的設計是錯誤的,那麼,我們就必須付出很多代價。
如果你閱讀了Fowler的整篇文章,你會發現,其中的指導建議是非常實用的。在決定將所有組件組合到一起時,開發人員需要非常確信這些組件都會有所改變,並且規模也會發生變化。服務粒度越粗,就越難以符合規定原則。
服務粒度越細,就越能夠靈活地降低變化和負載所帶來的影響。然而,利弊之間的權衡過程是非常復雜的,我們要在配置和資金模型的基礎上考慮到基礎設施的成本問題。
6. 怎麼用API網關構建微服務
由於這些問題的存在,客戶端與微服務直接通信很少是合理的。 使用API網關通常,一個更好的方法是使用所謂的API網關。API網關是一個伺服器,是系統的唯一...
7. 如何在python中使用ZeroMQ和Docker構建微服務架構
微服務是什麼?
微服務是一種架構風格,它包括多個彼此間進行通信的獨立進程。在設計上,這些進程具有高度的可擴展性、相互解耦而且一次只完成一個較小的任務。這些服務都擁有自己的資源以及通過網路實現彼此間通信的進程。
相比於靠後端的 單體結構
來封裝所有伺服器邏輯的傳統客戶端-伺服器架構(C/S架構)而言,微服務架構的差異性體現在關注點分離(Separation of
concern)。這種設計模式更易於維護,使得靈活性、可擴展性及容錯能力更強。但是這種分布式架構所的不足之處體現在如果設計不合理就會使得排錯及維
護變得復雜。
一個簡單微服務的例子
讓我們來分析這樣的一個場景:你正在使用微服務模式構建一個電子商務網店。
對於一個電商網店上的常見商品,好比說iPhone,其詳情頁會顯示:
。產品的及基本信息
。你的購買歷史
。哪些人買了iPhone也買了手機套
。與蘋果手機相關的優惠和折扣
。店家的數據
。送貨方式
。推薦商品等等
此外,這個簡單的產品詳情頁的介面將有多個版本的來匹配web、移動端以及用於第三方應用程序的REST API。
在微服務模式中數據分布在多個服務之間。在這個例子中,服務包括:
。產品詳情服務
。商家服務
。支付服務
。優惠及折扣服務
。庫存服務
。定價服務
。回顧服務
。推薦服務
這些獨立的服務是如何被訪問的呢?
解決辦法是使用一個API網管,它作為所有客戶端的單一入口並且根據需求調用分布在整個基礎架構中的特定微服務。以上模式的行業應用案例是NetFlix API網關,它具有支持不同設備的多個API客戶端。你可以點擊此處 了解更多 。
構建一個簡單的微服務
目前有很多方法可以用於構建你的微服務。
在本文中我們將使用ZeroMQ來創建兩個進程之間的通信。ZeroMQ提供了用於在套接字之上開發可擴展、分布式systed的構建塊。它使用橢圓曲線密碼體制(第四版)來實現安全性,並提供了即刻開啟的 通訊模式 。
關於ZMQ,還有很多 優點 。MQ即是針對非同步工作而設計的線程化消息隊列。談論太多zeroMQ的內容已經超出了本文的范疇,你可以閱讀 使用zeromq 以及 zeromq用於分布式系統 。
我們要使用的另一個工具是 Docker 。本文假設讀者對Docker已經有了基礎的了解。
ZeroMQ有很多種通訊模式,為了開始我們的工作,讓我們用ZeroMQ和Flask來配置一個簡單的PUB-SUB。下圖展示了組件之間的關系和數據流。
1&3 - 一個flask伺服器運行在5000埠上而且其URL是 /downcase/ 。該URL用來接受(GET)請求,而所有格式為的請求將收到回應:答謝字元將會轉換為小寫字元並返回。
2 - 回應的消息也被發送給同一個容器中的ZMQ發布者(Publisher)
4,5 - ZMQ訂閱者(subscriber)持續監聽並將來自ZMQ伺服器的消息保存到名為 subscriber.log 的文件中
創建伺服器
首先看一下我們的Dockerfile
<pre><code>
FROM ubuntu:14.04
RUN apt-get update
RUN apt-get install -y --force-yes python python-dev python-setuptools software-properties-common gcc python-pip
RUN apt-get clean all
RUN pip install pyzmq
RUN pip install Flask
ADD zmqserver.py /tmp/zmqserver.py
Flask Port
EXPOSE 5000
Zmq Sub Server
EXPOSE 4444
CMD ["python","/tmp/zmqserver.py"]
</code></pre>
我們選擇Ubuntu
14.04作為容器操作系統。我們安裝了基本的軟體包。通過pip,我們安裝pyzmq(zeromq的Python綁定)同時也安裝了Flask。接著
我們導出埠5000(flask伺服器)和4444(發布者運行的埠)。此外,我們復制了包含所有flask及zeromq
pythond代碼的腳本文件 zmqserver.py 並運行它。
現在我們來看一下zmqserver.py的內容:
server.py
import time
import zmq
HOST = '127.0.0.1'
PORT = '4444'
_context = zmq.Context()
_publisher = _context.socket(zmq.PUB)
url = 'tcp://{}:{}'.format(HOST, PORT)
def publish_message(message):
try:
_publisher.bind(url)
time.sleep(1)
_publisher.send(message)
except Exception as e:
print "error {}".format(e)
finally: _publisher.unbind(url)
from flask import Flask
from flask import request
app = Flask(__name__)
@app.route("/downcase/", methods=['GET'])
def lowerString():
_strn = request.args.get('param')
response = 'lower case of {} is {}'.format(_strn, _strn.lower()) publish_message(response)
return response
if __name__ == '__main__':
app.run(host='0.0.0.0', debug=False)
ZMQ發布者運行在4444埠上。我們創建了一個context並且聲明了URL。我們運行了flask app,它通過URL /downcase/ 把GET獲得的參數 Param 轉換成小寫字元,這就是服務的應答。應答的字元串是 published ,它作為一個消息把相同的字元串返回給瀏覽器。
為了構建以上的Docker映像(image),我們執行以下的命令:
sudo docker build -t docker-zmq-pub
並且在該映像之上執行:
docker run --name docker-pub-server -p 5000:5000 -p 4444:4444 -t docker-zmq-pub
我們把容器中的埠5000和4444映射到這台主機上,於是無論客戶端在哪裡,它們都可以訂閱這個發布者。
訂閱者客戶端
client.py
import zmq
import sys
import time
import logging
import os
HOST = '127.0.0.1'
PORT = '4444'
logging.basicConfig(filename='subscriber.log', level=logging.INFO)
class ZClient(object):
def __init__(self, host=HOST, port=PORT):
"""Initialize Worker"""
self.host = host
self.port = port
self._context = zmq.Context()
self._subscriber = self._context.socket(zmq.SUB)
print "Client Initiated"
def receive_message(self):
"""Start receiving messages"""
self._subscriber.connect('tcp://{}:{}'.format(self.host, self.port))
self._subscriber.setsockopt(zmq.SUBSCRIBE, b"")
while True:
print 'listening on tcp://{}:{}'.format(self.host, self.port)
message = self._subscriber.recv()
print message
logging.info(
'{} - {}'.format(message, time.strftime("%Y-%m-%d %H:%M")))
if __name__ == '__main__':
zs = ZClient()
zs.receive_message()
我們聲明了發布者的IP地址及埠,當前它運行在同一個的主機上因此地址是127開頭。我們在URL tcp://IP:PORT 上進行監聽。一旦我們收到一個消息,就將其附上時間戳後記錄到名為 subscriber.log 的文件中。運行客戶端要做的所有工作就是執行 python <name_of_client_file>.py 。如果你在以上的架構上進行構建,它可以很好地充當近實時的日誌聚合引擎。
我在Unbuntu主機上對以上的代碼進行了測試。這里所用的代碼保管在 github 上。這是一個如何配置zmq、docker和python伺服器的基礎講解,在我的下一片文章中我們會使用我們已經學習的東西構建簡單的微服務。
8. 如何讓多個程序搭建在一個伺服器上
.搭建一個適合於架構師使用的開發與實現環境Linux
眾所周知,當項目越來越大的時候,項目的設計也會越來越復雜,一個線上運營的商業項目往往會涉及到多種編程語言與技術的使用,比如php+nodejs,ruby+nodejs,java、python等。如果你覺得為這些不同種類的技術搭建環境就已經夠頭痛了,那麼我想告訴你,還有更復雜的問題還在後頭,不同語言環境也是在不斷發展之中的,php從4.9到5.2再到7.0中間有著巨大的變化,代碼存在著大量的不兼容。
java 1.x到java 6、7 再到java8不止是語法上的變化,甚至連程序設計的思想與原則都發生了改變。類似的例子還有python和ruby,這兩個語言在linux運維中使用非常廣泛,很多自動化運維腳本都是用python2.x與ruby1.x編寫的,然而現在社區中活躍的新版本確是python3.x和ruby2.x。大家不要覺得這些個語言與你們無關,很有可能你們在linux中使用的某些工具就是用老版本的python和ruby編寫的。
這么多的問題,是不是已經讓大家頭大了呢?在大規模商業項目中,解決環境、版本等問題其實有很成熟的解決方案。
現在的很多雲計算廠商,利用虛擬化技術、容器技術,採用服務化方式進行開發,比如現在流行的docker+微服務架構就是其中的佼佼者,關於更多容器技術與雲計算的話題,我會在以後的活動中為大家分享。要完成這種規模的商業項目架構設計,架構師常需要進行程序測試與驗證設計,可要在筆記本上完成這樣的部署,無論是利用虛擬化技術(虛擬機)還是容器技術,都顯得太重了,架構師需要的應該是一個全能的開發、部署與運維環境,環境需要與產品環境高度一致,而且還應該輕便,節省性能,方便管理。