15分鐘從零開始搭建支援10w+用戶的生產環境(二)
上一篇文章,把這個架構的起因,和作業系統的選擇進行了詳細說明。
二、資料庫的選擇
對於一個10W+用戶的系統,資料庫選擇很重要。
一般來說,這個用戶量,根據不同的應用,會形成單表年度400W~4000W條的數據量。在這個數據量下,我們需要相對大型的資料庫。
可供選擇的主流資料庫:
類別 | 資料庫 |
---|---|
關係型資料庫 | MySQL, SQL Server for Linux, Oracle, DB2, PostgreDB |
NoSQL資料庫 | Radis, HBase, MongoDB |
具體資料庫的區別分析,網上有很多文章,這兒就不再多討論。
在現在討論的這個架構下,有幾個要求:
- 資料庫要是免費的;
- 資料庫的安裝要簡單;
- 資料庫的使用要方便。這個使用,包括管理和開發;
- 最重要的一點,是數據後期可擴展成分散式架構,以保證在不改動程式碼的情況下,支援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
在這一節的最後,補充兩個問題:
- 擴展性
上面介紹的是單MongoDB資料庫的安裝。這是最簡單的一種形式,也是應用最多的一種形式。
如果數據很重要,為了防止任何情況的數據丟失,可以採用 Master + N Slave 的方式,做主從結構,把同樣的多個庫放到多個伺服器上,互為備份。同時,這種方式還可以實現讀寫分離。
如果數據量再大,則可以把資料庫擴展成集群,用以增加資料庫的容量,並提升訪問性能。
- 安全
上面介紹安裝的時候,採用的默認埠。在實際使用時,可以改換一個埠,減少被掃描攻擊的機率。
另外,資料庫默認安裝時,是不檢查用戶的。換言之,就是任何人都可以連到資料庫。如果用在生產伺服器上,一定要在資料庫中建議用戶和許可權,以保證阻擋非法的訪問。
MongoDB的安全問題,我會單獨寫一篇文章來說,敬請關注。
(未完待續)
微信公眾帳號:老王Plus 如果你想及時得到個人文章以及內容的消息推送,或者想看看個人推薦的技術資料,可以掃描左邊二維碼(或者長按識別二維碼)關注個人公眾號)。 本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。 |