日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

15分钟从零开始搭建支持10w+用户的生产环境(二)

發(fā)布時間:2023/12/4 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 15分钟从零开始搭建支持10w+用户的生产环境(二) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

上一篇文章,把這個架構(gòu)的起因,和操作系統(tǒng)的選擇進行了詳細說明。

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

?

二、數(shù)據(jù)庫的選擇

對于一個10W+用戶的系統(tǒng),數(shù)據(jù)庫選擇很重要。

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

可供選擇的主流數(shù)據(jù)庫:

類別數(shù)據(jù)庫
關系型數(shù)據(jù)庫MySQL, SQL Server for Linux, Oracle, DB2, PostgreDB
NoSQL數(shù)據(jù)庫Radis, HBase, MongoDB

具體數(shù)據(jù)庫的區(qū)別分析,網(wǎng)上有很多文章,這兒就不再多討論。

?

在現(xiàn)在討論的這個架構(gòu)下,有幾個要求:

  • 數(shù)據(jù)庫要是免費的;

  • 數(shù)據(jù)庫的安裝要簡單;

  • 數(shù)據(jù)庫的使用要方便。這個使用,包括管理和開發(fā);

  • 最重要的一點,是數(shù)據(jù)后期可擴展成分布式架構(gòu),以保證在不改動代碼的情況下,支持B、C輪的數(shù)據(jù):P。

  • 在這個要求下,我們選擇MongoDB作為主數(shù)據(jù)庫。

    MongoDB的官網(wǎng):https://www.mongodb.com

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

    community版和professional版本最大的區(qū)別是pro版有InMemoryDB模式,可以依托大內(nèi)存建立存放在內(nèi)存中的數(shù)據(jù)庫文件。一般應用,社區(qū)版足夠。

    ?

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

    第一步:下載數(shù)據(jù)庫,以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,用來操作數(shù)據(jù)庫。

    mongod是單個數(shù)據(jù)庫的服務程序,每個數(shù)據(jù)庫都需要一個mongod進程。

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

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

    第二步:安裝&啟動

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

    下面是啟動數(shù)據(jù)庫。

    ./mongod?--dbpath?your_database_folder_path

    MongoDB運行,只需要一個數(shù)據(jù)庫文件的存放目錄。

    當你看到命令執(zhí)行后,出現(xiàn)一大篇內(nèi)容,其中有兩行:

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

    的時候,恭喜你,數(shù)據(jù)庫已經(jīng)上線了。

    ?

    簡單不?

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

    這是個大型的基于文檔的NoSQL數(shù)據(jù)庫!

    ?

    如果想查詢各個命令都有什么參數(shù),可以在命令后邊加 --help 來查詢。

    例如:

    ./mongod?--help

    里面有詳細的說明。

    ?

    下面列幾個常用的參數(shù):

    --config?配置文件。MongoDB除了直接用命令行參數(shù)外,也可以把參數(shù)寫在一個配置文件中,然后在config參數(shù)引用這個配置文件

    --port?MongoDB默認端口是27017,可以改成任何端口

    --logpath?默認數(shù)據(jù)庫日志是輸出到終端的,可以改為保存到文件(也可以不用這個參數(shù),而在命令行重定向)

    --bind_ip?MongoDB默認綁定IP是127.0.0.1,可以改成任意IP地址

    --db_path?數(shù)據(jù)庫文件的保存目錄

    下面,我們檢查一下數(shù)據(jù)庫的安裝是否正確。

    我們用mongo連到數(shù)據(jù)庫進行操作:

    $?./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

    ?

    在這一節(jié)的最后,補充兩個問題:

  • 擴展性

  • 上面介紹的是單MongoDB數(shù)據(jù)庫的安裝。這是最簡單的一種形式,也是應用最多的一種形式。

    如果數(shù)據(jù)很重要,為了防止任何情況的數(shù)據(jù)丟失,可以采用 Master + N Slave 的方式,做主從結(jié)構(gòu),把同樣的多個庫放到多個服務器上,互為備份。同時,這種方式還可以實現(xiàn)讀寫分離。

    如果數(shù)據(jù)量再大,則可以把數(shù)據(jù)庫擴展成集群,用以增加數(shù)據(jù)庫的容量,并提升訪問性能。

  • 安全

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

    另外,數(shù)據(jù)庫默認安裝時,是不檢查用戶的。換言之,就是任何人都可以連到數(shù)據(jù)庫。如果用在生產(chǎn)服務器上,一定要在數(shù)據(jù)庫中建議用戶和權(quán)限,以保證阻擋非法的訪問。

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

    (未完待續(xù))

    您的贊賞是我最大的鼓勵

    I will be more solid with your donations

    總結(jié)

    以上是生活随笔為你收集整理的15分钟从零开始搭建支持10w+用户的生产环境(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。