摘要:今天小數(shù)給大家?guī)淼氖且黄a級(jí)干貨文章,與大家分享一些利用以微服務(wù)形式設(shè)置應(yīng)用的經(jīng)驗(yàn)與心得。為何選擇加在我效力的企業(yè)中,我們一直在利用為全部工程師構(gòu)建開發(fā)環(huán)境。運(yùn)行命令,從而利用構(gòu)建鏡像并安裝。
為何選擇Docker加Rails API?今天小數(shù)給大家?guī)淼氖且黄a級(jí)干貨文章,與大家分享一些利用Rails API以微服務(wù)形式設(shè)置應(yīng)用的經(jīng)驗(yàn)與心得。
在我效力的企業(yè)中,我們一直在利用Docker為全部工程師構(gòu)建開發(fā)環(huán)境。在這種情況下,新人加入后能夠快速擁有與之對(duì)應(yīng)的容器工作環(huán)境。與大多數(shù)長久使用整體應(yīng)用的企業(yè)一樣,我們同樣希望充分發(fā)揮微服務(wù)架構(gòu)帶來的松散耦合、高緊湊性與獨(dú)立部署等固有優(yōu)勢(shì)。
我曾經(jīng)利用Rails作為API構(gòu)建過幾款應(yīng)用——坦率地講,這種作法有點(diǎn)矯枉過正,因?yàn)槲覀兤鋵?shí)沒必要使用其中的全部視圖邏輯與額外中間件。Rails API gem集成于Rails 5版本當(dāng)中,此版本目前處于beta測(cè)試階段。我曾經(jīng)打算利用Docker完成上述工作,但卻在設(shè)置過程中遇到了困難,所以在今天的文章中,我將利用Rails 4完成設(shè)置并將rails-api gem作為關(guān)聯(lián)性添加至Gemfile當(dāng)中。
大家可能會(huì)問,為什么要將Rails API作為微服務(wù)架構(gòu)中的技術(shù)堆棧。我認(rèn)為具體答案取決于技術(shù)團(tuán)隊(duì)的實(shí)際專長方向。互聯(lián)網(wǎng)上曾經(jīng)就要不要投身微服務(wù)以及應(yīng)該具體使用哪些技術(shù)產(chǎn)生過激烈的爭論。可以看到,很多朋友利用Node.js、Go、Scala或者Java等其它卓越技術(shù)完成了任務(wù)。我曾經(jīng)拿出過一段時(shí)間體驗(yàn)這些方案,也認(rèn)同它們的出色表現(xiàn),但我所的在團(tuán)隊(duì)更熟悉Rails。因此出于快速開發(fā)的考量,我們做出了這樣的決定。如果非要再選一種潛在方案,我個(gè)人更傾向于Node.js,因?yàn)槲覀兊暮芏嘈聭?yīng)用都以其為基礎(chǔ)構(gòu)建而成。在我看來,這一轉(zhuǎn)型項(xiàng)目的最終目標(biāo)在于確保每項(xiàng)服務(wù)都擁有小巧的體積,從而能夠在必要時(shí)實(shí)現(xiàn)輕松重寫。
從Docker起步 設(shè)置工作今天的教程面向Mac用戶,但大家也可以在Linux發(fā)行版或者Windows平臺(tái)上實(shí)現(xiàn)類似的操作。首先在終端中為項(xiàng)目創(chuàng)建一個(gè)目錄。我將把項(xiàng)目命名為“inventory manager”,但大家也可以隨意選擇自己喜歡的名稱。
接下來在項(xiàng)目root目錄下創(chuàng)建幾個(gè)文件。
設(shè)置 DockerfileDockerfile負(fù)責(zé)容納我們Docker容器環(huán)境的全部設(shè)置。
那么我們?cè)撛谖募刑砑釉鯓拥膬?nèi)容?在這里我們利用Ruby的最新版本(2.3.0)創(chuàng)建一套鏡像,而后在該容器上運(yùn)行apt軟件包管理命令。我們將利用MySQL客戶端庫進(jìn)行開發(fā)。此后,我們將把本地Gemfile與Gemfile.lock添加至容器的文件系統(tǒng)當(dāng)中,再安裝其關(guān)聯(lián)性。最后,我們將項(xiàng)目目錄內(nèi)的全部內(nèi)容添加至容器內(nèi)。
設(shè)置 docker-compose.yml我們需要設(shè)置docker-compose.yml文件,從而確保Docker Compose工具能夠?qū)ails API應(yīng)用及我們的MySQL容器間的通信進(jìn)行編排。
這套配置建立起一套mysql容器,外加一套由Dockerfile構(gòu)建而成的名為web的容器,后者在端口9292上運(yùn)行Puma webserver。接下來,我們可以將這一Rails應(yīng)用容器連接至mysql容器,從而保證二者能夠彼此通信。
設(shè)置 Gemfile在Gemfile當(dāng)中,我們將添加Rails gem、Rails API gem、mysql客戶端適配器、Puma webserver以及Active Model Serializers(用于JSON格式的響應(yīng)信息)。
創(chuàng)建Docker鏡像現(xiàn)在進(jìn)行Docker鏡像的創(chuàng)建。
運(yùn)行Docker build命令,從而利用Dockerfile構(gòu)建鏡像并安裝gem。
Docker鏡像已經(jīng)成功創(chuàng)建完成
一旦Gemfile或者Dockerfile內(nèi)容出現(xiàn)變更,大家將需要再次運(yùn)行這條命令以重構(gòu)Docker鏡像。大家可以利用以下命令查看已經(jīng)創(chuàng)建的鏡像:
接下來,我們?cè)贒ocker鏡像中運(yùn)行Rails API命令以創(chuàng)建應(yīng)用結(jié)構(gòu)。在我們的 docker-compose.yml文件內(nèi),將“web”作為命令執(zhí)行的目標(biāo)容器。
創(chuàng)建Rails API應(yīng)用結(jié)構(gòu)
現(xiàn)在需要對(duì)database.yml文件進(jìn)行設(shè)置,完成后即可進(jìn)行數(shù)據(jù)遷移。
主機(jī)為“db”,我們已經(jīng)在docker-compose.yml file文件中定義了該名稱。這一主機(jī)值必須與我們?cè)赿ocker-compose.yml文件中定義的數(shù)據(jù)庫容器保持一致。
測(cè)試Web應(yīng)用的運(yùn)行情況現(xiàn)在應(yīng)用結(jié)構(gòu)已經(jīng)構(gòu)建完成,下面運(yùn)行Web服務(wù)器以檢查能夠正常查看Rails狀態(tài)頁面。
在各自容器中運(yùn)行數(shù)據(jù)庫與Web應(yīng)用,而后運(yùn)行Puma server以監(jiān)聽端口9292
我的docker-machine ip運(yùn)行在端口192.168.59.100上。大家應(yīng)確保運(yùn)行docker-machine ip以找到正確的docker ip(本示例直接使用docker ip作為別名)。
下一步現(xiàn)在我們的應(yīng)用已經(jīng)開始正常運(yùn)行,以此為基礎(chǔ)大家可以隨意創(chuàng)建數(shù)據(jù)模型以及控制器等等。
我們可以通過這種方式創(chuàng)建更多微服務(wù),并確保不同應(yīng)用之間利用JSON通過http經(jīng)由同一Docker主機(jī)的不同web服務(wù)器端口實(shí)現(xiàn)彼此通信。我們也可以使用消息收發(fā)機(jī)制實(shí)現(xiàn)不同服務(wù)間的通信,例如RabbitMQ。
原文作者:Charles Wang
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/26613.html
摘要:今天小數(shù)又漂洋過海給大家運(yùn)來一篇干貨,在今天的文章中,我們將一同了解如何在上規(guī)劃一套成功的微服務(wù)架構(gòu)。通過在基于的微服務(wù)之前安裝反向代理,輸入的請(qǐng)求可被正確分發(fā)至多主機(jī)上的任意數(shù)量容器實(shí)例當(dāng)中。規(guī)劃技巧四安裝反向代理及或管理平臺(tái)。 今天小數(shù)又漂洋過海給大家運(yùn)來一篇干貨,在今天的文章中,我們將一同了解如何在Docker上規(guī)劃一套成功的微服務(wù)架構(gòu)。 Docker的人氣仍然持續(xù)升溫,這主要?dú)w...
摘要:開發(fā),最讓人頭疼的就是環(huán)境問題。所以一直在嘗試做一個(gè)可以隨時(shí)復(fù)用的開發(fā)環(huán)境來。安裝關(guān)于下有了最新的解決方案,就是,直接下載安裝就可以了目前尚在版本,但是對(duì)于開發(fā)環(huán)境使用足矣。 rails 開發(fā),最讓人頭疼的就是環(huán)境問題。其本身的理念加上某偉大防御工程的幫助,使得每次環(huán)境的配置都的花費(fèi)很長的時(shí)間來解決;同時(shí),與人協(xié)作也有諸多不便。所以一直在嘗試做一個(gè)可以隨時(shí)復(fù)用的開發(fā)環(huán)境來。 1. 安裝...
摘要:自去年以來,微服務(wù)受到了前所未有的關(guān)注,眾多的互聯(lián)網(wǎng)巨頭開始實(shí)施微服務(wù)架構(gòu)并取得了不錯(cuò)的反響,話不多說,今天我們就為大家盤點(diǎn)一下谷歌亞馬遜等十大科技公司的微服務(wù)實(shí)踐案例。 自去年以來,微服務(wù)受到了前所未有的關(guān)注,眾多的互聯(lián)網(wǎng)巨頭開始實(shí)施微服務(wù)架構(gòu)并取得了不錯(cuò)的反響,話不多說,今天我們就為大家盤點(diǎn)一下谷歌、亞馬遜等十大科技公司的微服務(wù)實(shí)踐案例。 谷歌 隨著多元化微服務(wù)的流行,越來越多的服...
摘要:或許你的第一次微服務(wù)體驗(yàn),就從本文開始在本文中,和等紛紛亮相,并配有詳細(xì)的代碼說明。該角色與本地網(wǎng)絡(luò)及的配置設(shè)置相關(guān)。由于會(huì)在虛擬機(jī)初始化過程中自動(dòng)執(zhí)行配置任務(wù),因此惟一的解決辦法就是將相關(guān)內(nèi)容提取至單獨(dú)的劇本當(dāng)中 這是一篇溫和有趣的技術(shù)文章,如果你初識(shí)Docker,對(duì)微服務(wù)充滿興趣,不妨一讀。或許你的第一次微服務(wù)體驗(yàn),就從本文開始…… 在本文中,Mesos、Zookeeper、Ma...
摘要:對(duì)程序員來說,阻礙幸福感最大的因素應(yīng)該是那個(gè)偉大的墻了。所幸國內(nèi)有或者阿里云這樣的云服務(wù)商提供鏡像加速服務(wù),可直接搜索鏡像加速,添加這些服務(wù)商提供的地址即可。 對(duì)程序員來說,阻礙幸福感最大的因素應(yīng)該是那個(gè)偉大的墻了。 本文對(duì) docker 系統(tǒng)配置過程中,國內(nèi)使用的一些加速的辦法做一些記錄和總結(jié),希望能給有需要的人帶來微小的幫助。 Docker for mac 下載 Docker fo...
閱讀 1750·2021-09-27 14:02
閱讀 3100·2021-09-27 13:36
閱讀 1046·2019-08-30 12:46
閱讀 1834·2019-08-30 10:51
閱讀 3571·2019-08-29 17:02
閱讀 940·2019-08-29 16:38
閱讀 1846·2019-08-29 16:37
閱讀 3003·2019-08-26 10:32