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

上一篇文章,把這個架構的原由,和操做系統的選擇進行了詳細說明。html

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

2、數據庫的選擇

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

通常來講,這個用戶量,根據不一樣的應用,會造成單表年度400W~4000W條的數據量。在這個數據量下,咱們須要相對大型的數據庫。mongodb

可供選擇的主流數據庫:shell

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

具體數據庫的區別分析,網上有不少文章,這兒就再也不多討論。數據庫

在如今討論的這個架構下,有幾個要求:安全

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

在這個要求下,咱們選擇MongoDB做爲主數據庫。bash

MongoDB的官網: https://www.mongodb.com服務器

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

community版和professional版本最大的區別是pro版有InMemoryDB模式,能夠依託大內存創建存放在內存中的數據庫文件。通常應用,社區版足夠。

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

第一步:下載數據庫,以4.2.6 for Debian版本爲例:

wget https://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

掃描二維碼,關注我的公衆號,能夠第一時間獲得最新的我的文章和內容推送

本文版權歸做者全部,轉載請保留此聲明和原文連接

相關文章
相關標籤/搜索