溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

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

發(fā)布時(shí)間:2021-09-18 11:07:00 來源:億速云 閱讀:122 作者:柒染 欄目:編程語言

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

小Hub領(lǐng)讀:

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

前言

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

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

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

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

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

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

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

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

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

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

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

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

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

1、項(xiàng)目管理 / Bug 管理 / 問題管理

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

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

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

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

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

2、DNS

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

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

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

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

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

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

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

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

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

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

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

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

  • 健康檢查;

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

4、CDN

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

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

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

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

5、RPC 框架

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

傳統(tǒng)關(guān)系數(shù)據(jù)庫用得最多的是 MySQL,成熟,穩(wěn)定,一些基本的需求都能滿足,在一定數(shù)據(jù)量級(jí)之前基本單機(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 的一個(gè)分支,主要由開源社區(qū)在維護(hù),采用 GPL 授權(quán)許可。開發(fā)這個(gè)分支的原因之一是:甲骨文公司收購了 MySQL 后,有將 MySQL 閉源的潛在風(fēng)險(xiǎn),因此社區(qū)采用分支的方式來避開這個(gè)風(fēng)險(xiǎn)。

在 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í)在大數(shù)據(jù)分析時(shí)已經(jīng)開始應(yīng)用 TiDB,當(dāng)時(shí)應(yīng)用的主要原因是 MySQL 要使用分庫分表,邏輯開發(fā)比較復(fù)雜,擴(kuò)展性不夠。

8、NoSQL

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

常見 NoSQL 有 4 個(gè)類型:

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

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

  • 文檔,數(shù)據(jù)存儲(chǔ)方案非常適用承載大量不相關(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)系圖譜,需要對(duì)整個(gè)圖做計(jì)算才能得出結(jié)果,不容易做分布式的集群方案,常見的有 Neo4J,InfoGrid 等。

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

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

9、消息中間件

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

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

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

  • 削峰填谷:當(dāng)系統(tǒng)遇到大流量時(shí),監(jiān)控圖上會(huì)看到一個(gè)一個(gè)的山峰樣的流量圖,通過使用消息中間件將大流量的請(qǐng)求放入隊(duì)列,通過消費(fèi)者程序?qū)㈥?duì)列中的處理請(qǐng)求慢慢消化,達(dá)到消峰填谷的效果。最典型的場景是秒殺系統(tǒng),在電商的秒殺系統(tǒng)中下單服務(wù)往往會(huì)是系統(tǒng)的瓶頸,因?yàn)橄聠涡枰獙?duì)庫存等做數(shù)據(jù)庫操作,需要保證強(qiáng)一致性,此時(shí)使用消息中間件進(jìn)行下單排隊(duì)和流控,讓下單服務(wù)慢慢把隊(duì)列中的單處理完,保護(hù)下單服務(wù),以達(dá)到削峰填谷的作用。

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

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

圖 3

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

10、代碼管理

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

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

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

11、持續(xù)集成

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

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

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

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

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

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

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

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

12、日志系統(tǒng)

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

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

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

  • Logstash 是一個(gè)完全開源的工具,它可以對(duì)你的日志進(jìn)行收集、分析,并將其存儲(chǔ)供以后使用。

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

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

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

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

圖 4,ELK 流程圖

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

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

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

其中:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Push Gateway 支持臨時(shí)性 Job 主動(dòng)推送指標(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ù)器主動(dòng)前來抓取。Prometheus 提供多種類型的 Exporter 用于采集各種不同服務(wù)的運(yùn)行狀態(tài)。目前支持的有數(shù)據(jù)庫、硬件、消息中間件、存儲(chǔ)系統(tǒng)、HTTP 服務(wù)器、JMX 等。

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

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

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

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

14、配置系統(tǒng)

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

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

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

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

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

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

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

圖 8,流程圖

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

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

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

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

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

16、跳板機(jī)

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

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

17、機(jī)器管理

機(jī)器管理的工具選擇的考量可以包含以下三個(gè)方面:

  1. 是否簡單,是否需要每臺(tái)機(jī)器部署 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 使用消息隊(duì)列 zeroMQ 傳輸數(shù)據(jù);大規(guī)模并發(fā)的能力對(duì)于幾十臺(tái) - 200 臺(tái)規(guī)模的兄弟來講,Ansible 的性能也可接受,如果一次操作上千臺(tái),用 salt 好一些。

如圖 9 所示:

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

圖 9,機(jī)器管理軟件對(duì)比

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

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

1、選擇合適的語言

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 制定匯報(bào)機(jī)制,晨會(huì) / 周報(bào);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI