成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

如何從零開始搭建創(chuàng)業(yè)公司后臺技術(shù)棧

這篇文章將為大家詳細(xì)講解有關(guān)如何從零開始搭建創(chuàng)業(yè)公司后臺技術(shù)棧,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

創(chuàng)新互聯(lián)擁有網(wǎng)站維護技術(shù)和項目管理團隊,建立的售前、實施和售后服務(wù)體系,為客戶提供定制化的網(wǎng)站制作、成都網(wǎng)站建設(shè)、網(wǎng)站維護、資陽托管服務(wù)器解決方案。為客戶網(wǎng)站安全和日常運維提供整體管家式外包優(yōu)質(zhì)服務(wù)。我們的網(wǎng)站維護服務(wù)覆蓋集團企業(yè)、上市公司、外企網(wǎng)站、商城網(wǎng)站開發(fā)、政府網(wǎng)站等各類型客戶群體,為全球上1000家企業(yè)提供全方位網(wǎng)站維護、服務(wù)器維護解決方案。

小Hub領(lǐng)讀:

好長的一篇文章,說到創(chuàng)業(yè),很多人都有激情,你知道在創(chuàng)業(yè)公司當(dāng)架構(gòu)師是個什么樣的體驗嗎,你先來看看搭建企業(yè)技術(shù)棧需要什么技術(shù)棧,你考慮好了沒?

前言

說到后臺技術(shù)棧,腦海中是不是浮現(xiàn)的是這樣一幅圖?

如何從零開始搭建創(chuàng)業(yè)公司后臺技術(shù)棧

有點眼暈,以下只是我們會用到的一些語言的合集,而且只是語言層面的一部分,就整個后臺技術(shù)棧來說,這只是一個開始,從語言開始,還有很多很多的內(nèi)容。今天要說的后臺是大后臺的概念,放在服務(wù)器上的東西都屬于后臺的東西,比如使用的框架,語言,數(shù)據(jù)庫,服務(wù),操作系統(tǒng)等等。

整個后臺技術(shù)棧我的理解包括 4 個層面的內(nèi)容:

  • 語言:用了哪些開發(fā)語言,如:C++/Java/Go/PHP/Python/Ruby 等等;

  • 組件:用了哪些組件,如:MQ 組件,數(shù)據(jù)庫組件等等;

  • 流程:怎樣的流程和規(guī)范,如:開發(fā)流程,項目流程,發(fā)布流程,監(jiān)控告警流程,代碼規(guī)范等等;

  • 系統(tǒng):系統(tǒng)化建設(shè),上面的流程需要有系統(tǒng)來保證,如:規(guī)范發(fā)布流程的發(fā)布系統(tǒng),代碼管理系統(tǒng)等等;

結(jié)合以上的的 4 個層面的內(nèi)容,整個后臺技術(shù)棧的結(jié)構(gòu)如圖 2 所示:

如何從零開始搭建創(chuàng)業(yè)公司后臺技術(shù)棧

圖 2 后臺技術(shù)棧結(jié)構(gòu)

以上的這些內(nèi)容都需要我們從零開始搭建,在創(chuàng)業(yè)公司,沒有大公司那些完善的基礎(chǔ)設(shè)施,需要我們從開源界,從云服務(wù)商甚至有些需要自己去組合,去拼裝,去開發(fā)一個適合自己的組件或系統(tǒng)以達(dá)成我們的目標(biāo)。咱們一個個系統(tǒng)和組件的做選型,最終形成我們的后臺技術(shù)棧。

各系統(tǒng)組件選型

1、項目管理 / Bug 管理 / 問題管理

項目管理軟件是整個業(yè)務(wù)的需求,問題,流程等等的集中地,大家的跨部門溝通協(xié)同大多依賴于項目管理工具。有一些 SaaS 的項目管理服務(wù)可以使用,但是很多時間不滿足需求,此時我們可以選擇一些開源的項目,這些項目本身有一定的定制能力,有豐富的插件可以使用,一般的創(chuàng)業(yè)公司需求基本上都能得到滿足,常用的項目如下:

  • Redmine:用 Ruby 開發(fā)的,有較多的插件可以使用,能自定義字段,集成了項目管理,Bug 問題跟蹤,WIKI 等功能,不過好多插件 N 年沒有更新了;

  • Phabricator:用 PHP 開發(fā)的,F(xiàn)acebook 之前的內(nèi)部工具,開發(fā)這工具的哥們離職后自己搞了一個公司專門做這個軟件,集成了代碼托管, Code Review,任務(wù)管理,文檔管理,問題跟蹤等功能,強烈推薦較敏捷的團隊使用;

  • Jira:用 Java 開發(fā)的,有用戶故事,task 拆分,燃盡圖等等,可以做項目管理,也可以應(yīng)用于跨部門溝通場景,較強大;

  • 悟空 CRM :這個不是項目管理,這個是客戶管理,之所以在這里提出來,是因為在 To B 的創(chuàng)業(yè)公司里面,往往是以客戶為核心來做事情的,可以將項目管理和問題跟進的在悟空 CRM 上面來做,他的開源版本已經(jīng)基本實現(xiàn)了 CR< 的核心 功能,還帶有一個任務(wù)管理功能,用于問題跟進,不過用這個的話,還是需要另一個項目管理的軟件協(xié)助,順便說一嘴,這個系統(tǒng)的代碼寫得很難維護,只能適用于客戶規(guī)模?。? 萬以內(nèi))時。

2、DNS

DNS 是一個很通用的服務(wù),創(chuàng)業(yè)公司基本上選擇一個合適的云廠商就行了,國內(nèi)主要是兩家:

  • 阿里萬網(wǎng):阿里 2014 年收購了萬網(wǎng),整合了其域名服務(wù),最終形成了現(xiàn)在的阿里萬網(wǎng),其中就包含 DNS 這塊的服務(wù);

  • 騰訊 DNSPod:騰訊 2012 年以 4000 萬收購 DNSPod 100% 股份,主要提供域名解析和一些防護功能;

如果你的業(yè)務(wù)是在國內(nèi),主要就是這兩家,選 一個就好,像今日頭條這樣的企業(yè)用的也是 DNSPod 的服務(wù),除非一些特殊的原因才需要自建,比如一些 cdn 廠商,或者對區(qū)域有特殊限制的。要實惠一點用阿里最便宜的基礎(chǔ)版就好了,要成功率高一些,還是用 DNSPod 的貴的那種。

在國外還是選擇亞馬遜吧,阿里的 DNS 服務(wù)只有在日本和美國有節(jié)點,東南亞最近才開始部點, DNSPod 也只有美國和日本,像一些出海的企業(yè),其選擇的云服務(wù)基本都是亞馬遜。

如果是線上產(chǎn)品,DNS 強烈建議用付費版,阿里的那幾十塊錢的付費版基本可以滿足需求。如果還需要一些按省份或按區(qū)域調(diào)試的邏輯,則需要加錢,一年也就幾百塊,省錢省力。

如果是國外,優(yōu)先選擇亞馬遜,如果需要國內(nèi)外互通并且有自己的 APP 的話,建議還是自己實現(xiàn)一些容災(zāi)邏輯或者智能調(diào)度,因為沒有一個現(xiàn)成的 DNS 服務(wù)能同時較好的滿足國內(nèi)外場景,或者用多個域名,不同的域名走不同的 DNS 。

3、LB(負(fù)載均衡

LB(負(fù)載均衡)是一個通用服務(wù),一般云廠商的 LB 服務(wù)基本都會如下功能:

  • 支持四層協(xié)議請求(包括 TCP、UDP 協(xié)議);

  • 支持七層協(xié)議請求(包括 HTTP、HTTPS 協(xié)議);

  • 集中化的證書管理系統(tǒng)支持 HTTPS 協(xié)議;

  • 健康檢查;

如果你線上的服務(wù)機器都是用的云服務(wù),并且是在同一個云服務(wù)商的話,可以直接使用云服務(wù)商提供的 LB 服務(wù),如阿里云的 SLB,騰訊云的 CLB,亞馬遜的 ELB 等等。如果是自建機房基本都是 LVS + Nginx。

4、CDN

CDN 現(xiàn)在已經(jīng)是一個很紅很紅的市場,基本上只能掙一些辛苦錢,都是貼著成本在賣。國內(nèi)以網(wǎng)宿為龍頭,他們家占據(jù)整個國內(nèi)市場份額的 40% 以上,后面就是騰訊,阿里。網(wǎng)宿有很大一部分是因為直播的興起而崛起。

國外,Amazon 和 Akamai 合起來占比大概在 50%,曾經(jīng)的國際市場老大 Akamai 擁有全球超一半的份額,在 Amazon CDN 入局后,份額跌去了將近 20%,眾多中小企業(yè)都轉(zhuǎn)向后者,Akamai 也是無能為力。

國內(nèi)出海的 CDN 廠商,更多的是為國內(nèi)的出海企業(yè)服務(wù),三家大一點的 CDN 服務(wù)商里面也就網(wǎng)宿的節(jié)點多一些,但是也多不了多少。阿里和騰訊還處于前期階段,僅少部分國家有節(jié)點。

就創(chuàng)業(yè)公司來說,CDN 用騰訊云或阿里云即可,其相關(guān)系統(tǒng)較完善,能輕松接入,網(wǎng)宿在系統(tǒng)支持層面相對較弱一些,而且還貴一些。并且,當(dāng)流量上來后,CDN 不能只用一家,需要用多家,不同的 CDN 在全國的節(jié)點覆蓋不一樣,而且針對不同的客戶云廠商內(nèi)部有些區(qū)分客戶集群,并不是全節(jié)點覆蓋(但有些云廠商說自己是全網(wǎng)節(jié)點),除了節(jié)點覆蓋的問題,多 CDN 也在一定程度上起到容災(zāi)的作用。

5、RPC 框架

維基百科對 RPC 的定義是:遠(yuǎn)程過程調(diào)用(Remote Procedure Call,RPC)是一個計算機通信協(xié)議。該協(xié)議允許運行于一臺計算機的程序調(diào)用另一臺計算機的子程序,而程序員無需額外地為這個交互作用編程。

通俗來講,一個完整的 RPC 調(diào)用過程,就是 Server 端實現(xiàn)了一個函數(shù),客戶端使用 RPC 框架提供的接口,調(diào)用這個函數(shù)的實現(xiàn),并獲取返回值的過程。

業(yè)界 RPC 框架大致分為兩大流派,一種側(cè)重跨語言調(diào)用,另一種是偏重服務(wù)治理。

跨語言調(diào)用型的 RPC 框架有 Thrift、gRPC、Hessian、Hprose 等。這類 RPC 框架側(cè)重于服務(wù)的跨語言調(diào)用,能夠支持大部分的語言進行語言無關(guān)的調(diào)用,非常適合多語言調(diào)用場景。但這類框架沒有服務(wù)發(fā)現(xiàn)相關(guān)機制,實際使用時需要代理層進行請求轉(zhuǎn)發(fā)和負(fù)載均衡策略控制。

其中,gRPC 是 Google 開發(fā)的高性能、通用的開源 RPC 框架,其由 Google 主要面向移動應(yīng)用開發(fā)并基于 HTTP/2 協(xié)議標(biāo)準(zhǔn)而設(shè)計,基于 ProtoBuf(Protocol Buffers)序列化協(xié)議開發(fā),且支持眾多開發(fā)語言。本身它不是分布式的,所以要實現(xiàn)框架的功能需要進一步的開發(fā)。

Hprose(High Performance Remote Object Service Engine)是一個 MIT 開源許可的新型輕量級跨語言跨平臺的面向?qū)ο蟮母咝阅苓h(yuǎn)程動態(tài)通訊中間件。

服務(wù)治理型的 RPC 框架的特點是功能豐富,提供高性能的遠(yuǎn)程調(diào)用、服務(wù)發(fā)現(xiàn)及服務(wù)治理能力,適用于大型服務(wù)的服務(wù)解耦及服務(wù)治理,對于特定語言 (Java) 的項目可以實現(xiàn)透明化接入。缺點是語言耦合度較高,跨語言支持難度較大。國內(nèi)常見的冶理型 RPC 框架如下:

  • Dubbo:Dubbo 是阿里巴巴公司開源的一個 Java 高性能優(yōu)秀的服務(wù)框架,使得應(yīng)用可通過高性能的 RPC 實現(xiàn)服務(wù)的輸出和輸入功能,可以和 Spring 框架無縫集成。當(dāng)年在淘寶內(nèi)部,Dubbo 由于跟淘寶另一個類似的框架 HSF 有競爭關(guān)系,導(dǎo)致 Dubbo 團隊解散,最近又活過來了,有專職同學(xué)投入。

  • DubboX:DubboX 是由當(dāng)當(dāng)在基于 Dubbo 框架擴展的一個 RPC 框架,支持 REST 風(fēng)格的遠(yuǎn)程調(diào)用、Kryo/FST 序列化,增加了一些新的 feature。Motan:Motan 是新浪微博開源的一個 Java 框架。它誕生的比較晚,起于 2013 年,2016 年 5 月開源。Motan 在微博平臺中已經(jīng)廣泛應(yīng)用,每天為數(shù)百個服務(wù)完成近千億次的調(diào)用。

  • rpcx:rpcx 是一個類似阿里巴巴 Dubbo 和微博 Motan 的分布式的 RPC 服務(wù)框架,基于 Golang net/rpc 實現(xiàn)。但是 rpcx 基本只有一個人在維護,沒有完善的社區(qū),使用前要慎重,之前做 Golang 的 RPC 選型時也有考慮這個,最終還是放棄了,選擇了 gRPC,如果想自己自研一個 RPC 框架,可以參考學(xué)習(xí)一下。

6、名字發(fā)現(xiàn) / 服務(wù)發(fā)現(xiàn)

名字發(fā)現(xiàn)和服務(wù)發(fā)現(xiàn)分為兩種模式,一個是客戶端發(fā)現(xiàn)模式,一種是服務(wù)端發(fā)現(xiàn)模式。

框架中常用的服務(wù)發(fā)現(xiàn)是客戶端發(fā)現(xiàn)模式。

所謂服務(wù)端發(fā)現(xiàn)模式是指客戶端通過一個負(fù)載均衡器向服務(wù)發(fā)送請求,負(fù)載均衡器查詢服務(wù)注冊表并把請求路由到一臺可用的服務(wù)實例上?,F(xiàn)在常用的負(fù)載均衡器都是此類模式,常用于微服務(wù)中。

所有的名字發(fā)現(xiàn)和服務(wù)發(fā)現(xiàn)都要依賴于一個可用性非常高的服務(wù)注冊表,業(yè)界常用的服務(wù)注冊表有如下三個:

  • etcd,一個高可用、分布式、一致性、key-value 方式的存儲,被用在分享配置和服務(wù)發(fā)現(xiàn)中。兩個著名的項目使用了它:Kubernetes 和 Cloud Foundry。

  • Consul,一個發(fā)現(xiàn)和配置服務(wù)的工具,為客戶端注冊和發(fā)現(xiàn)服務(wù)提供了 API,Consul 還可以通過執(zhí)行健康檢查決定服務(wù)的可用性。

  • Apache ZooKeeper,是一個廣泛使用、高性能的針對分布式應(yīng)用的協(xié)調(diào)服務(wù)。Apache ZooKeeper 本來是 Hadoop 的子工程,現(xiàn)在已經(jīng)是頂級工程了。

除此之外也可以自己實現(xiàn)服務(wù)實現(xiàn),或者用 redis 也行,只是需要自己實現(xiàn)高可用性。

7、關(guān)系數(shù)據(jù)庫

關(guān)系數(shù)據(jù)庫分為兩種,一種是傳統(tǒng)關(guān)系數(shù)據(jù),如 Oracle,MySQL,Maria,DB2,PostgreSQL 等等,另一種是 NewSQL,即至少要滿足以下五點的新型關(guān)系數(shù)據(jù)庫:

  1. 完整地支持 SQL,支持 JOIN / GROUP BY / 子查詢等復(fù)雜 SQL 查詢。

  2. 支持傳統(tǒng)數(shù)據(jù)標(biāo)配的 ACID 事務(wù),支持強隔離級別。

  3. 具有彈性伸縮的能力,擴容縮容對于業(yè)務(wù)層完全透明。

  4. 真正的高可用,異地多活、故障恢復(fù)的過程不需要人為的接入,系統(tǒng)能夠自動地容災(zāi)和進行強一致的數(shù)據(jù)恢復(fù)。

  5. 具備一定的大數(shù)據(jù)分析能力。

傳統(tǒng)關(guān)系數(shù)據(jù)庫用得最多的是 MySQL,成熟,穩(wěn)定,一些基本的需求都能滿足,在一定數(shù)據(jù)量級之前基本單機傳統(tǒng)數(shù)據(jù)庫都可以搞定,而且現(xiàn)在較多的開源系統(tǒng)都是基于 MySQL,開箱即用,再加上主從同步和前端緩存,百萬 pv 的應(yīng)用都可以搞定了。不過 CentOS 7 已經(jīng)放棄了 MySQL,而改使用 MariaDB。MariaDB 數(shù)據(jù)庫管理系統(tǒng)是 MySQ L 的一個分支,主要由開源社區(qū)在維護,采用 GPL 授權(quán)許可。開發(fā)這個分支的原因之一是:甲骨文公司收購了 MySQL 后,有將 MySQL 閉源的潛在風(fēng)險,因此社區(qū)采用分支的方式來避開這個風(fēng)險。

在 Google 發(fā)布了 F1: A Distributed SQL Database That Scales 和 Spanner: Google’s Globally-Distributed Databasa 之后,業(yè)界開始流行起 NewSQL。于是有了 CockroachDB,于是有了奇叔公司的 TiDB。國內(nèi)已經(jīng)有比較多的公司使用 TiDB,之前在創(chuàng)業(yè)公司時在大數(shù)據(jù)分析時已經(jīng)開始應(yīng)用 TiDB,當(dāng)時應(yīng)用的主要原因是 MySQL 要使用分庫分表,邏輯開發(fā)比較復(fù)雜,擴展性不夠。

8、NOSQL

NoSQL 顧名思義就是 Not-Only SQL,也有人說是 No – SQL,個人偏向于 Not-Only SQL,它并不是用來替代關(guān)系庫,而是作為關(guān)系型數(shù)據(jù)庫的補充而存在。

常見 NoSQL 有 4 個類型:

  • 鍵值,適用于內(nèi)容緩存,適合混合工作負(fù)載并發(fā)高擴展要求大的數(shù)據(jù)集,其優(yōu)點是簡單,查詢速度快,缺點是缺少結(jié)構(gòu)化數(shù)據(jù),常見的有 Redis,Memcache,BerkeleyDB 和 Voldemort 等等;

  • 列式,以列簇式存儲,將同一列數(shù)據(jù)存在一起,常見于分布式的文件系統(tǒng),其中以 Hbase,Cassandra 為代表。Cassandra 多用于寫多讀少的場景,國內(nèi)用得比較多的有 360,大概 1500 臺機器的集群,國外大規(guī)模使用的公司比較多,如 eBay,Instagram,Apple 和沃爾瑪?shù)鹊龋?/p>

  • 文檔,數(shù)據(jù)存儲方案非常適用承載大量不相關(guān)且結(jié)構(gòu)差別很大的復(fù)雜信息。性能介于 kv 和關(guān)系數(shù)據(jù)庫之間,它的靈感來于 lotus notes,常見的有 MongoDB,CouchDB 等等;

  • 圖形,圖形數(shù)據(jù)庫擅長處理任何涉及關(guān)系的狀況。社交網(wǎng)絡(luò),推薦系統(tǒng)等。專注于構(gòu)建關(guān)系圖譜,需要對整個圖做計算才能得出結(jié)果,不容易做分布式的集群方案,常見的有 Neo4J,InfoGrid 等。

除了以上 4 種類型,還有一些特種的數(shù)據(jù)庫,如對象數(shù)據(jù)庫,XML 數(shù)據(jù)庫,這些都有針對性對某些存儲類型做了優(yōu)化的數(shù)據(jù)庫。

在實際應(yīng)用場景中,何時使用關(guān)系數(shù)據(jù)庫,何時使用 NoSQL,使用哪種類型的數(shù)據(jù)庫,這是我們在做架構(gòu)選型時一個非常重要的考量,甚至?xí)绊懻麄€架構(gòu)的方案。

9、消息中間件

消息中間件在后臺系統(tǒng)中是必不可少的一個組件,一般我們會在以下場景中使用消息中間件:

  • 異步處理:異步處理是使用消息中間件的一個主要原因,在工作中最常見的異步場景有用戶注冊成功后需要發(fā)送注冊成功郵件、緩存過期時先返回老的數(shù)據(jù),然后異步更新緩存、異步寫日志等等;通過異步處理,可以減少主流程的等待響應(yīng)時間,讓非主流程或者非重要業(yè)務(wù)通過消息中間件做集中的異步處理。

  • 系統(tǒng)解耦:比如在電商系統(tǒng)中,當(dāng)用戶成功支付完成訂單后,需要將支付結(jié)果給通知 ERP 系統(tǒng)、發(fā)票系統(tǒng)、WMS、推薦系統(tǒng)、搜索系統(tǒng)、風(fēng)控系統(tǒng)等進行業(yè)務(wù)處理;這些業(yè)務(wù)處理不需要實時處理、不需要強一致,只需要最終一致性即可,因此可以通過消息中間件進行系統(tǒng)解耦。通過這種系統(tǒng)解耦還可以應(yīng)對未來不明確的系統(tǒng)需求。

  • 削峰填谷:當(dāng)系統(tǒng)遇到大流量時,監(jiān)控圖上會看到一個一個的山峰樣的流量圖,通過使用消息中間件將大流量的請求放入隊列,通過消費者程序?qū)㈥犃兄械奶幚碚埱舐?,達(dá)到消峰填谷的效果。最典型的場景是秒殺系統(tǒng),在電商的秒殺系統(tǒng)中下單服務(wù)往往會是系統(tǒng)的瓶頸,因為下單需要對庫存等做數(shù)據(jù)庫操作,需要保證強一致性,此時使用消息中間件進行下單排隊和流控,讓下單服務(wù)慢慢把隊列中的單處理完,保護下單服務(wù),以達(dá)到削峰填谷的作用。

業(yè)界消息中間件是一個非常通用的東西,大家在做選型時有使用開源的,也有自己造輪子的,甚至有直接用 MySQL 或 Redis 做隊列的,關(guān)鍵看是否滿足你的需求,如果是使用開源的項目,以下的表格在選型時可以參考:

如何從零開始搭建創(chuàng)業(yè)公司后臺技術(shù)棧

圖 3

以上圖的緯度為:名字、成熟度、所屬社區(qū) / 公司、文檔、授權(quán)方式、開發(fā)語言、支持的協(xié)議、客戶端支持的語言、性能、持久化、事務(wù)、集群、負(fù)載均衡、管理界面、部署方式、評價。

10、代碼管理

代碼是互聯(lián)網(wǎng)創(chuàng)業(yè)公司的命脈之一,代碼管理很重要,常見的考量點包括兩塊:

  • 安全和權(quán)限管理,將代碼放到內(nèi)網(wǎng)并且對于關(guān)系公司命脈的核心代碼做嚴(yán)格的代碼控制和機器的物理隔離;

  • 代碼管理工具,Git 作為代碼管理的不二之選,你值得擁有。GitLab 是當(dāng)今最火的開源 Git 托管服務(wù)端,沒有之一,雖然有企業(yè)版,但是其社區(qū)版基本能滿足我們大部分需求,結(jié)合 Gerrit 做 Code review,基本就完美了。當(dāng)然 GitLab 也有代碼對比,但沒 Gerrit 直觀。Gerrit 比 GitLab 提供了更好的代碼檢查界面與主線管理體驗,更適合在對代碼質(zhì)量有高要求的文化下使用。

11、持續(xù)集成

持續(xù)集成簡,稱 CI(continuous integration),是一種軟件開發(fā)實踐,即團隊開發(fā)成員經(jīng)常集成他們的工作,每天可能會發(fā)生多次集成。每次集成都通過自動化的構(gòu)建(包括編譯,發(fā)布,自動化測試)來驗證,從而盡早地發(fā)現(xiàn)集成錯誤。持續(xù)集成為研發(fā)流程提供了代碼分支管理 / 比對、編譯、檢查、發(fā)布物輸出等基礎(chǔ)工作,為測試的覆蓋率版本編譯、生成等提供統(tǒng)一支持。

業(yè)界免費的持續(xù)集成工具中系統(tǒng)我們有如下一些選擇:

  • Jenkins:Java 寫的有強大的插件機制,MIT 協(xié)議開源 (免費,定制化程度高,它可以在多臺機器上進行分布式地構(gòu)建和負(fù)載測試)。Jenkins 可以算是無所不能,基本沒有 Jenkins 做不了的,無論從小型團隊到大型團隊 Jenkins 都可以搞定。不過如果要大規(guī)模使用,還是需要有人力來學(xué)習(xí)和維護。

  • TeamCity:TeamCity 與 Jenkins 相比使用更加友好,也是一個高度可定制化的平臺。但是用的人多了,TeamCity 就要收費了。

  • Strider:Strider 是一個開源的持續(xù)集成和部署平臺,使用 Node.js 實現(xiàn),存儲使用的是 MongoDB,BSD 許可證,概念上類似 Travis 和 Jenkins。

  • GitLab CI:從 GitLab 8.0 開始,GitLab CI 就已經(jīng)集成在 GitLab,我們只要在項目中添加一個 .gitlab-ci.yml 文件,然后添加一個 Runner,即可進行持續(xù)集成。并且 GitLab 與 Docker 有著非常好的相互協(xié)作的能力。免費版與付費版本不同可以參見這里:https://about.gitlab.com/products/feature-comparison/。

  • Travis:Travis 和 GitHub 強關(guān)聯(lián);閉源代碼使用 SaaS 還需考慮安全問題;不可定制;開源項目免費,其它收費。

  • Go:Go 是 ThoughtWorks 公司最新的 Cruise Control 的化身。除了 ThoughtWorks 提供的商業(yè)支持,Go 是免費的。它適用于 Windows,Mac 和各種 Linux 發(fā)行版。

12、日志系統(tǒng)

日志系統(tǒng)一般包括打日志,采集,中轉(zhuǎn),收集,存儲,分析,呈現(xiàn),搜索還有分發(fā)等。一些特殊的如染色,全鏈條跟蹤或者監(jiān)控都可能需要依賴于日志系統(tǒng)實現(xiàn)。日志系統(tǒng)的建設(shè)不僅僅是工具的建設(shè),還有規(guī)范和組件的建設(shè),最好一些基本的日志在框架和組件層面加就行了,比如全鏈接跟蹤之類的。

對于常規(guī)日志系統(tǒng) ELK 能滿足大部分的需求,ELK 包括如下組件:

  • ElasticSearch 是個開源分布式搜索引擎,它的特點有:分布式,零配置,自動發(fā)現(xiàn),索引自動分片,索引副本機制,RESTful 風(fēng)格接口,多數(shù)據(jù)源,自動搜索負(fù)載等。

  • Logstash 是一個完全開源的工具,它可以對你的日志進行收集、分析,并將其存儲供以后使用。

  • Kibana 是一個開源和免費的工具,它可以為 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以幫助匯總、分析和搜索重要數(shù)據(jù)日志。

  • Filebeat 已經(jīng)完全替代了 Logstash-Forwarder 成為新一代的日志采集器,同時鑒于它輕量、安全等特點,越來越多人開始使用它。

因為免費的 ELK 沒有任何安全機制,所以這里使用了 Nginx 作反向代理,避免用戶直接訪問 Kibana 服務(wù)器。加上配置 Nginx 實現(xiàn)簡單的用戶認(rèn)證,一定程度上提高安全性。另外,Nginx 本身具有負(fù)載均衡的作用,能夠提高系統(tǒng)訪問性能。ELK 架構(gòu)如圖 4 所示:

如何從零開始搭建創(chuàng)業(yè)公司后臺技術(shù)棧

圖 4,ELK 流程圖

對于有實時計算的需求,可以使用 Flume + Kafka + Storm + MySQL 方案,一 般架構(gòu)如圖 5 所示:

如何從零開始搭建創(chuàng)業(yè)公司后臺技術(shù)棧

圖 5,實時分析系統(tǒng)架構(gòu)圖

其中:

  • Flume 是一個分布式、可靠、和高可用的海量日志采集、聚合和傳輸?shù)娜罩臼占到y(tǒng),支持在日志系統(tǒng)中定制各類數(shù)據(jù)發(fā)送方,用于收集數(shù)據(jù);同時,F(xiàn)lume 提供對數(shù)據(jù)進行簡單處理,并寫到各種數(shù)據(jù)接受方(可定制)的能力。

  • Kafka 是由 Apache 軟件基金會開發(fā)的一個開源流處理平臺,由 Scala 和 Java 編寫。其本質(zhì)上是一個 “按照分布式事務(wù)日志架構(gòu)的大規(guī)模發(fā)布 / 訂閱消息隊列”,它以可水平擴展和高吞吐率而被廣泛使用。

Kafka 追求的是高吞吐量、高負(fù)載,F(xiàn)lume 追求的是數(shù)據(jù)的多樣性,二者結(jié)合起來簡直完美。

13、監(jiān)控系統(tǒng)

監(jiān)控系統(tǒng)只包含與后臺相關(guān)的,這里主要是兩塊,一個是操作系統(tǒng)層的監(jiān)控,比如機器負(fù)載,IO,網(wǎng)絡(luò)流量,CPU,內(nèi)存等操作系統(tǒng)指標(biāo)的監(jiān)控。另一個是服務(wù)質(zhì)量和業(yè)務(wù)質(zhì)量的監(jiān)控,比如服務(wù)的可用性,成功率,失敗率,容量,QPS 等等。常見業(yè)務(wù)的監(jiān)控系統(tǒng)先有操作系統(tǒng)層面的監(jiān)控(這部分較成熟),然后擴展出其它監(jiān)控,如 Zabbix,小米的 Open-Falcon,也有一出來就是兩者都支持的,如 Prometheus。如果對業(yè)務(wù)監(jiān)控要求比較高一些,在創(chuàng)業(yè)選型中建議可以優(yōu)先考慮 Prometheus。這里有一個有趣的分布,如圖 6 所示。

如何從零開始搭建創(chuàng)業(yè)公司后臺技術(shù)棧

圖 6,監(jiān)控系統(tǒng)分布

亞洲區(qū)域使用 Zabbix 較多,而美洲和歐洲,以及澳大利亞使用 Prometheus 居多,換句話說,英文國家地區(qū)(發(fā)達(dá)國家?)使用 Prometheus 較多。

Prometheus 是由 SoundCloud 開發(fā)的開源監(jiān)控報警系統(tǒng)和時序列數(shù)據(jù)庫(TSDB)。Prometheus 使用 Go 語言開發(fā),是 Google BorgMon 監(jiān)控系統(tǒng)的開源版本。相對于其它監(jiān)控系統(tǒng)使用的 push 數(shù)據(jù)的方式,Prometheus 使用的是 pull 的方式,其架構(gòu)如圖 7 所示:

如何從零開始搭建創(chuàng)業(yè)公司后臺技術(shù)棧

圖 7,Prometheus 架構(gòu)圖

如上圖所示,Prometheus 包含的主要組件如下:

  • Prometheus Server 主要負(fù)責(zé)數(shù)據(jù)采集和存儲,提供 PromQL 查詢語言的支持。Server 通過配置文件、文本文件、ZooKeeper、Consul、DNS SRV Lookup 等方式指定抓取目標(biāo)。根據(jù)這些目標(biāo)會,Server 定時去抓取 metrics 數(shù)據(jù),每個抓取目標(biāo)需要暴露一個 http 服務(wù)的接口給它定時抓取。

  • 客戶端 SDK:官方提供的客戶端類庫有 Go、Java、Scala、Python、Ruby,其他還有很多第三方開發(fā)的類庫,支持 Nodejs、PHP、Erlang 等。

  • Push Gateway 支持臨時性 Job 主動推送指標(biāo)的中間網(wǎng)關(guān)。

  • Exporter Exporter 是 Prometheus 的一類數(shù)據(jù)采集組件的總稱。它負(fù)責(zé)從目標(biāo)處搜集數(shù)據(jù),并將其轉(zhuǎn)化為 Prometheus 支持的格式。與傳統(tǒng)的數(shù)據(jù)采集組件不同的是,它并不向中央服務(wù)器發(fā)送數(shù)據(jù),而是等待中央服務(wù)器主動前來抓取。Prometheus 提供多種類型的 Exporter 用于采集各種不同服務(wù)的運行狀態(tài)。目前支持的有數(shù)據(jù)庫、硬件、消息中間件、存儲系統(tǒng)、HTTP 服務(wù)器、JMX 等。

  • Alertmanager:是一個單獨的服務(wù),可以支持 Prometheus 的查詢語句,提供十分靈活的報警方式。

  • Prometheus HTTP API 的查詢方式,自定義所需要的輸出。

  • Grafana 是一套開源的分析監(jiān)視平臺,支持 Graphite,InfluxDB,OpenTSDB,Prometheus,Elasticsearch,CloudWatch 等數(shù)據(jù)源,其 UI 非常漂亮且高度定制化。

創(chuàng)業(yè)公司選擇 Prometheus + Grafana 的方案,再加上統(tǒng)一的服務(wù)框架(如 gRPC),可以滿足大部分中小團隊的監(jiān)控需求。

14、配置系統(tǒng)

隨著程序功能的日益復(fù)雜,程序的配置日益增多:各種功能的開關(guān)、降級開關(guān),灰度開關(guān),參數(shù)的配置、服務(wù)器的地址、數(shù)據(jù)庫配置等等,除此之外,對后臺程序配置的要求也越來越高:配置修改后實時生效,灰度發(fā)布,分環(huán)境、分用戶,分集群管理配置,完善的權(quán)限、審核機制等等,在這樣的大環(huán)境下,傳統(tǒng)的通過配置文件、數(shù)據(jù)庫等方式已經(jīng)越來越無法滿足開發(fā)人員對配置管理的需求,業(yè)界有如下兩種方案:

  • 基于 zk 和 etcd,支持界面和 api ,用數(shù)據(jù)庫來保存版本歷史,預(yù)案,走審核流程,最后下發(fā)到 zk 或 etcd 這種有推送能力的存儲里(服務(wù)注冊本身也是用 zk 或 etcd,選型就一塊了)??蛻舳硕贾苯雍?zk 或 etcd 打交道。至于灰度發(fā)布,各家不同,有一種實現(xiàn)是同時發(fā)布一個需要灰度的 IP 列表,客戶端監(jiān)聽到配置節(jié)點變化時,對比一下自己是否屬于該列表。PHP 這種無狀態(tài)的語言和其他 zk/etcd 不支持的語言,只好自己在客戶端的機器上起一個 Agent 來監(jiān)聽變化,再寫到配置文件或共享內(nèi)存,如 360 的 Qconf。

  • 基于運維自動化的配置文件的推送,審核流程,配置數(shù)據(jù)管理和方案一類似,下發(fā)時生成配置文件,基于運維自動化工具如 Puppet,Ansible 推送到每個客戶端,而應(yīng)用則定時重新讀取這個外部的配置文件,灰度發(fā)布在下發(fā)配置時指定 IP 列表。

創(chuàng)業(yè)公司前期不需要這種復(fù)雜,直接上 zk,弄一個界面管理 zk 的內(nèi)容,記錄一下所有人的操作日志,程序直連 zk,或者或者用 Qconf 等基于 zk 優(yōu)化后的方案。

15、發(fā)布系統(tǒng) / 部署系統(tǒng)

從軟件生產(chǎn)的層面看,代碼到最終服務(wù)的典型流程如圖 8 所示:

如何從零開始搭建創(chuàng)業(yè)公司后臺技術(shù)棧

圖 8,流程圖

從上圖中可以看出,從開發(fā)人員寫下代碼到服務(wù)最終用戶是一個漫長過程,整體可以分成三個階段:

  • 從代碼(Code)到成品庫(Artifact)這個階段主要對開發(fā)人員的代碼做持續(xù)構(gòu)建并把構(gòu)建產(chǎn)生的制品集中管理,是為部署系統(tǒng)準(zhǔn)備輸入內(nèi)容的階段。

  • 從制品到可運行服務(wù) 這個階段主要完成制品部署到指定環(huán)境,是部署系統(tǒng)的最基本工作內(nèi)容。

  • 從開發(fā)環(huán)境到最終生產(chǎn)環(huán)境 這個階段主要完成一次變更在不同環(huán)境的遷移,是部署系統(tǒng)上線最終服務(wù)的核心能力。

發(fā)布系統(tǒng)集成了制品管理,發(fā)布流程,權(quán)限控制,線上環(huán)境版本變更,灰度發(fā)布,線上服務(wù)回滾等幾方面的內(nèi)容,是開發(fā)人員工作結(jié)晶最終呈現(xiàn)的重要通道。開源的項目中沒有完全滿足的項目,如果只是 Web 類項目,Walle、Piplin 都是可用的,但是功能不太滿足,創(chuàng)業(yè)初期可以集成 Jenkins + Gitlab + Walle(可以考慮兩天時間完善一下),以上方案基本包括制品管理,發(fā)布流程,權(quán)限控制,線上環(huán)境版本變更,灰度發(fā)布(需要自己實現(xiàn)),線上服務(wù)回滾等功能。

16、跳板機

跳板機面對的是需求是要有一種能滿足角色管理與授權(quán)審批、信息資源訪問控制、操作記錄和審計、系統(tǒng)變更和維護控制要求,并生成一些統(tǒng)計報表配合管理規(guī)范來不斷提升 IT 內(nèi)控的合規(guī)性,能對運維人員操作行為的進行控制和審計,對誤操作、違規(guī)操作導(dǎo)致的操作事故,快速定位原因和責(zé)任人。其功能模塊一般包括:帳戶管理、認(rèn)證管理、授權(quán)管理、審計管理等等。

開源項目中,Jumpserver 能夠?qū)崿F(xiàn)跳板機常見需求,如授權(quán)、用戶管理、服務(wù)器基本信息記錄等,同時又可批量執(zhí)行腳本等功能;其中錄像回放、命令搜索、實時監(jiān)控等特點,又能幫助運維人員回溯操作歷史,方便查找操作痕跡,便于管理其他人員對服務(wù)器的操作控制。

17、機器管理

機器管理的工具選擇的考量可以包含以下三個方面:

  1. 是否簡單,是否需要每臺機器部署 Agent(客戶端)

  2. 語言的選擇(Puppet/Chef vs Ansible/SaltStack )開源技術(shù),不看官網(wǎng)不足以熟練,不懂源碼不足以精通;Puppet、Chef 基于 Ruby 開發(fā),Ansible、SaltStack 基于 Python 開發(fā)的

  3. 速度的選擇(Ansible vs SaltStack)Ansible 基于 SSH 協(xié)議傳輸數(shù)據(jù),SaltStack 使用消息隊列 zeroMQ 傳輸數(shù)據(jù);大規(guī)模并發(fā)的能力對于幾十臺 - 200 臺規(guī)模的兄弟來講,Ansible 的性能也可接受,如果一次操作上千臺,用 salt 好一些。

如圖 9 所示:

如何從零開始搭建創(chuàng)業(yè)公司后臺技術(shù)棧

圖 9,機器管理軟件對比

一般創(chuàng)業(yè)公司選擇 Ansible 能解決大部問題,其簡單,不需要安裝額外的客戶端,可以從命令行來運行,不需要使用配置文件。至于比較復(fù)雜的任務(wù),Ansible 配置通過名為 Playbook 的配置文件中的 YAML 語法來加以處理。Playbook 還可以使用模板來擴展其功能。

創(chuàng)業(yè)公司的選擇

1、選擇合適的語言

  • 選擇團隊熟悉的 / 能掌控的,創(chuàng)業(yè)公司人少事多,無太多冗余讓研發(fā)團隊熟悉新的語言,能快速上手,能快速出活,出了問題能快速解決的問題的語言才是好的選擇。

  • 選擇更現(xiàn)代一些的,這里的現(xiàn)代是指語言本身已經(jīng)完成一些之前需要特殊處理的特性,比如內(nèi)存管理,線程等等。

  • 選擇開源輪子多的或者社區(qū)活躍度高的,這個原則是為了保證在開發(fā)過程中減少投入,有穩(wěn)定可靠的輪子可以使用,遇到問題可以在網(wǎng)上快速搜索到答案。

  • 選擇好招人的 一門合適的語言會讓創(chuàng)業(yè)團隊減少招聘的成本,快速招到合適的人。

  • 選擇能讓人有興趣的 與上面一點相關(guān),讓人感興趣,在后面留人時有用。

2、選擇合適的組件和云服務(wù)商

  • 選擇靠譜的云服務(wù)商;

  • 選擇云服務(wù)商的組件;

  • 選擇成熟的開源組件,而不是最新出的組件;

  • 選擇采用在一線互聯(lián)網(wǎng)公司落地并且開源的,且在社區(qū)內(nèi)形成良好口碑的產(chǎn)品;

  • 開源社區(qū)活躍度;

選擇靠譜的云服務(wù)商,其實這是一個偽命題,因為哪個服務(wù)商都不靠譜,他們所承諾的那些可用性問題基本上都會在你的身上發(fā)生,這里我們還是需要自己做一些工作,比如多服務(wù)商備份,如用 CDN,你一定不要只選一家,至少選兩家,一個是災(zāi)備,保持后臺切換的能力,另一個是多點覆蓋,不同的服務(wù)商在 CDN 節(jié)點上的資源是不一樣的。

選擇了云服務(wù)商以后,就會有很多的產(chǎn)品你可以選擇了,比較存儲,隊列這些都會有現(xiàn)成的產(chǎn)品,這個時候就糾結(jié)了,是用呢?還是自己在云主機上搭呢?在這里我的建議是前期先用云服務(wù)商的,大了后再自己搞,這樣會少掉很多運維的事情,但是這里要多了解一下云服務(wù)商的組件特性以及一些坑,比如他們內(nèi)網(wǎng)會經(jīng)常斷開,他們升級也會閃斷,所以在業(yè)務(wù)側(cè)要做好容錯和規(guī)避。

關(guān)于開源組件,盡可能選擇成熟的,成熟的組件經(jīng)歷了時間的考驗,基本不會出大的問題,并且有成套的配套工具,出了問題在網(wǎng)上也可以很快的找到答案,你所遇到的坑基本上都有人踩過了。

3、制定流程和規(guī)范

  • 制定開發(fā)的規(guī)范,代碼及代碼分支管理規(guī)范,關(guān)鍵性代碼僅少數(shù)人有權(quán)限;

  • 制定發(fā)布流程規(guī)范,從發(fā)布系統(tǒng)落地;

  • 制定運維規(guī)范;

  • 制定數(shù)據(jù)庫操作規(guī)范,收攏數(shù)據(jù)庫操作權(quán)限;

  • 制定告警處理流程,做到告警有人看有人處理;

  • 制定匯報機制,晨會 / 周報;

4、自研和選型合適的輔助系統(tǒng)

所有的流程和規(guī)范都需要用系統(tǒng)來固化,否則就是空中樓閣,如何選擇這些系統(tǒng)呢?參照上個章節(jié)咱們那些開源的,對比一下選擇的語言,組件之類的,選擇一個最合適的即可。

比如項目管理的,看下自己是什么類型的公司,開發(fā)的節(jié)奏是怎樣的,瀑布,敏捷的 按項目劃分,還是按客戶劃分等等,平時是按項目組織還是按任務(wù)組織等等。

比如日志系統(tǒng),之前是打的文本,那么上一個 ELK,規(guī)范化一些日志組件,基本上很長一段時間內(nèi)不用考慮日志系統(tǒng)的問題,最多拆分一下或者擴容一下。等到組織大了,自己搞一個日志系統(tǒng)。

比如代碼管理,項目管理系統(tǒng)這些都放內(nèi)網(wǎng),安全,在互聯(lián)網(wǎng)公司來說,屬于命脈了,命脈的東西還是放在別人拿不到或很難拿到的地方會比較靠譜一些。

5、選擇過程中需要思考的問題

技術(shù)棧的選擇有點像做出了某種承諾,在一定的時間內(nèi)這種承諾沒法改變,于是我們需要在選擇的時候有一些思考。

看前面內(nèi)容,有一個詞出現(xiàn)了三次,合適,選擇是合適的,不是最好,也不是最新,是最合適,適合是針對當(dāng)下,這種選擇是最合適的嗎?比如用 Go 這條線的東西,技術(shù)比較新,業(yè)界組件儲備夠嗎?組織內(nèi)的人員儲備夠嗎?學(xué)習(xí)成本多少?寫出來的東西能滿足業(yè)務(wù)性能要求嗎?能滿足時間要求嗎?

向未來看一眼,在一年到三年內(nèi),我們需要做出改變嗎?技術(shù)棧要做根本性的改變嗎?如果組織發(fā)展很快,在 200 人,500 人時,現(xiàn)有的技術(shù)棧是否需要大動?

創(chuàng)業(yè)過程中需要考慮成本,這里的成本不僅僅是花費多少錢,付出多少工資,有時更重要的是時間成本,很多業(yè)務(wù)在創(chuàng)業(yè)時大家拼的就是時間,就是一個時間窗,過了就沒你什么事兒了。

基于云的創(chuàng)業(yè)公司后臺技術(shù)架構(gòu)

結(jié)合上面內(nèi)容的考量,在對一個個系統(tǒng)和組件的做選型之后,以云服務(wù)為基礎(chǔ),一個創(chuàng)業(yè)公司的后臺技術(shù)架構(gòu)如圖 10 所示:

如何從零開始搭建創(chuàng)業(yè)公司后臺技術(shù)棧

關(guān)于如何從零開始搭建創(chuàng)業(yè)公司后臺技術(shù)棧就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

文章名稱:如何從零開始搭建創(chuàng)業(yè)公司后臺技術(shù)棧
分享路徑:http://jinyejixie.com/article48/posehp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號App開發(fā)、網(wǎng)站建設(shè)、手機網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司
科技| 莱芜市| 丽水市| 准格尔旗| 大足县| 察雅县| 麟游县| 仁怀市| 恩平市| 武邑县| 重庆市| 遂平县| 兴隆县| 紫金县| 博客| 武鸣县| 盖州市| 东平县| 南木林县| 阳东县| 泽普县| 西青区| 乾安县| 全南县| 芦溪县| 平远县| 岳池县| 赤壁市| 南江县| 蓬溪县| 渝中区| 烟台市| 庆元县| 手游| 临洮县| 昌宁县| 肥东县| 南宫市| 旺苍县| 韶关市| 武清区|