15分鐘從零開始搭建支援10w+用戶的生產環境(二)

上一篇文章,把這個架構的起因,和作業系統的選擇進行了詳細說明。

原文地址:15分鐘從零開始搭建支援10w+用戶的生產環境(一)

二、資料庫的選擇

對於一個10W+用戶的系統,資料庫選擇很重要。

一般來說,這個用戶量,根據不同的應用,會形成單表年度400W~4000W條的數據量。在這個數據量下,我們需要相對大型的資料庫。

可供選擇的主流資料庫:

類別 資料庫
關係型資料庫 MySQL, SQL Server for Linux, Oracle, DB2, PostgreDB
NoSQL資料庫 Radis, HBase, MongoDB

具體資料庫的區別分析,網上有很多文章,這兒就不再多討論。

在現在討論的這個架構下,有幾個要求:

  1. 資料庫要是免費的;
  2. 資料庫的安裝要簡單;
  3. 資料庫的使用要方便。這個使用,包括管理和開發;
  4. 最重要的一點,是數據後期可擴展成分散式架構,以保證在不改動程式碼的情況下,支援B、C輪的數據:P。

在這個要求下,我們選擇MongoDB作為主資料庫。

MongoDB的官網: //www.mongodb.com

MongoDB最新版下載: //www.mongodb.com/download-center/community

community版和professional版本最大的區別是pro版有InMemoryDB模式,可以依託大記憶體建立存放在記憶體中的資料庫文件。一般應用,社區版足夠。

先看看MongoDB的安裝有多簡單:

第一步:下載資料庫,以4.2.6 for Debian版本為例:

wget //fastdl.mongodb.org/linux/mongodb-linux-x86_64-debian92-4.2.6.tgz

下載完成後,打開壓縮包,

tar xvf mongodb-linux-x86_64-debian92-4.2.6.tgz -C /your_folder

我們會得到以下文件,

-rw-r--r-- 1 test test  30608 Apr 17 11:10 LICENSE-Community.txt
-rw-r--r-- 1 test test  16726 Apr 17 11:10 MPL-2
-rw-r--r-- 1 test test   2617 Apr 17 11:10 README
-rw-r--r-- 1 test test  75405 Apr 17 11:10 THIRD-PARTY-NOTICES
-rw-r--r-- 1 test test 183512 Apr 17 11:13 THIRD-PARTY-NOTICES.gotools
drwxr-xr-x 2 test test   4096 Apr 20 19:29 bin

bin目錄中,有以下文件,

-rwxr-xr-x 1 test test 12715648 Apr 17 11:12 bsondump
-rwxr-xr-x 1 test test     7694 Apr 17 11:36 install_compass
-rwxr-xr-x 1 test test 47998920 Apr 17 11:36 mongo
-rwxr-xr-x 1 test test 73240640 Apr 17 11:36 mongod
-rwxr-xr-x 1 test test 17526720 Apr 17 11:12 mongodump
-rwxr-xr-x 1 test test 17277000 Apr 17 11:12 mongoexport
-rwxr-xr-x 1 test test 17242056 Apr 17 11:12 mongofiles
-rwxr-xr-x 1 test test 17452192 Apr 17 11:12 mongoimport
-rwxr-xr-x 1 test test 17879808 Apr 17 11:13 mongoreplay
-rwxr-xr-x 1 test test 17851848 Apr 17 11:12 mongorestore
-rwxr-xr-x 1 test test 40628464 Apr 17 11:36 mongos
-rwxr-xr-x 1 test test 17029440 Apr 17 11:12 mongostat
-rwxr-xr-x 1 test test 16707368 Apr 17 11:12 mongotop

其中:

mongo是個shell,用來操作資料庫。

mongod是單個資料庫的服務程式,每個資料庫都需要一個mongod進程。

mongos是集群的路由和入口,做集群時必須要用到。

別的都是一些管理工具,可以慢慢了解。

第二步:安裝&啟動

MongoDB本身是一個綠色軟體,上一節的下載和解壓,就是安裝的過程了。

下面是啟動資料庫。

./mongod --dbpath your_database_folder_path

MongoDB運行,只需要一個資料庫文件的存放目錄。

當你看到命令執行後,出現一大篇內容,其中有兩行:

I  NETWORK  [listener] Listening on 127.0.0.1
I  NETWORK  [listener] waiting for connections on port 27017

的時候,恭喜你,資料庫已經上線了。

簡單不?

但是一定要記著,運行簡單並不等於這是個Access一樣的小東西。

這是個大型的基於文檔的NoSQL資料庫!

如果想查詢各個命令都有什麼參數,可以在命令後邊加 –help 來查詢。

例如:

./mongod --help

裡面有詳細的說明。

下面列幾個常用的參數:

參數 說明
config 配置文件。MongoDB除了直接用命令行參數外,也可以把參數寫在一個配置文件中,然後在config參數引用這個配置文件
port MongoDB默認埠是27017,可以改成任何埠
logpath 默認資料庫日誌是輸出到終端的,可以改為保存到文件(也可以不用這個參數,而在命令行重定向)
bind_ip MongoDB默認綁定IP是127.0.0.1,可以改成任意IP地址。
db_path 資料庫文件的保存目錄

下面,我們檢查一下資料庫的安裝是否正確。

我們用mongo連到資料庫進行操作:

$ ./mongo localhost:27017
MongoDB shell version v4.2.5
> use TestDB
switched to db TestDB
> db.collection.insert({"user":"test1"})
WriteResult({ "nInserted" : 1 })
> db.collection.insert({"user":"test2"})
WriteResult({ "nInserted" : 1 })
> db.collection.find()
"_id" : ObjectId("5ea0279699857fc83ddf6ef5"), "user" : "test1" }
> db.collection.find({"user":"test2"})
"_id" : ObjectId("5ea029a599857fc83ddf6ef6"), "user" : "test2" }
exit

在這一節的最後,補充兩個問題:

  1. 擴展性

上面介紹的是單MongoDB資料庫的安裝。這是最簡單的一種形式,也是應用最多的一種形式。

如果數據很重要,為了防止任何情況的數據丟失,可以採用 Master + N Slave 的方式,做主從結構,把同樣的多個庫放到多個伺服器上,互為備份。同時,這種方式還可以實現讀寫分離。

如果數據量再大,則可以把資料庫擴展成集群,用以增加資料庫的容量,並提升訪問性能。

  1. 安全

上面介紹安裝的時候,採用的默認埠。在實際使用時,可以改換一個埠,減少被掃描攻擊的機率。

另外,資料庫默認安裝時,是不檢查用戶的。換言之,就是任何人都可以連到資料庫。如果用在生產伺服器上,一定要在資料庫中建議用戶和許可權,以保證阻擋非法的訪問。

MongoDB的安全問題,我會單獨寫一篇文章來說,敬請關注。

(未完待續)

 


 

微信公眾帳號:老王Plus

如果你想及時得到個人文章以及內容的消息推送,或者想看看個人推薦的技術資料,可以掃描左邊二維碼(或者長按識別二維碼)關注個人公眾號)。

本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。