欧美,精品,综合,亚洲,好吊妞视频免新费观看,免费观看三级吃奶,一级a片女人自慰免费看

您當前的位置是:  首頁 > 資訊 > 文章精選 >
 首頁 > 資訊 > 文章精選 >

微軟云自主醫(yī)療保健手冊

2020-03-17 13:18:47   作者:   來源:   評論:0  點擊:


  今天我們給大家說說Azure上的MySQL的健康保健相關(guān)的話題,不帶推銷保健品,大家可以放心食用。
  數(shù)據(jù)庫是所有應(yīng)用中最不可或缺的一個組件,所有有狀態(tài)的數(shù)據(jù)都需要依托數(shù)據(jù)庫提供的格式,規(guī)范進行存儲、讀取、改寫等。那么既然是一個炙手可熱的角色,如何讓系統(tǒng)能夠快速有效的和數(shù)據(jù)庫進行溝通,就是一個比較有意思的話題了。如果把這個內(nèi)容全部展開,可能會涉及到數(shù)據(jù)庫的冗余性,擴展性設(shè)計等一系列的問題,這次我們就先把目標鎖定在如何快速管理連接這個點上。
  如果把各個應(yīng)用比作是需要看病就醫(yī)的病患,那么醫(yī)院可以說是一個大的數(shù)據(jù)庫。那如何看病就醫(yī),井然有序,就需要一個規(guī)章法度,比如病人是否有此地就醫(yī)的資格,是否已經(jīng)掛號,有否既往病史,還需要什么化驗等。那么同樣,應(yīng)用如果要得到數(shù)據(jù)庫的增刪改查的權(quán)限也一定要有一個流程。簡要來說,流程就是通過一些網(wǎng)絡(luò)協(xié)議,握手連接到數(shù)據(jù)庫,提供一個有效的連接字符串,隨后數(shù)據(jù)庫會對比此應(yīng)用是否有資格來訪問這個數(shù)據(jù)庫,最后就能愉快的增刪改查了。
  接下來我們將以Azure上面的MySQL PaaS為例,給大家講解一些簡單的數(shù)據(jù)庫連接的使用場景,以及最佳實踐。
  01、第一種場景:
  單個進程連接,非頻繁訪問
  我們假設(shè)一個病人只是有點小的頭疼腦熱,那么第一次就診結(jié)束,配了點藥,然后可能需要第二天去復(fù)診。這個時候也許他還得要走一次掛號,查醫(yī)保信息,配藥看醫(yī)生等一系列流程。所以并不能直接敲開醫(yī)生診室的門,說我想直接看病配藥。那么同樣的道理,我們到數(shù)據(jù)庫的連接中,會有一個超時(timeout)的概念,也就是說我第一次增刪改查完,也許我等待了60秒,再一次查詢,發(fā)現(xiàn)數(shù)據(jù)庫說對不起,請重新連接“掛號”因為時間太長了,我不認識你了,或者說你的狀態(tài)我不知道了,請重新握手協(xié)議,連接字符串,身份驗證走一遍。那么我們看圖示,里面哪些是我們需要一個數(shù)據(jù)庫連接要提供的信息呢。
  1.數(shù)據(jù)庫的連接字符串,這個可以在Azure上得到你的程序需要的連接字符串。需要注意的是Azure上的數(shù)據(jù)庫用戶名比較特殊,在@后面會帶上服務(wù)器名,這個和本地自建的不太一樣。
  2.隨后我們用Python的程序新建一個表格,并且插入一些數(shù)據(jù),模擬一個單進程的非頻繁訪問。
  3.那么現(xiàn)在我們加入一個延時60秒,看看會發(fā)生什么?

  4.為什么之前連接執(zhí)行語句都好好的,怎們就加了60秒的等待就歇菜了呢?別著急,我們在Azure MySQL的參數(shù)調(diào)整里看一下wait_timeout的值,你會發(fā)現(xiàn),咦,怎么有一個值是30秒呢?原來超過了30秒這個時間,原來的連接就超時了,我們程序里寫得是休眠60秒。就需要重新連接,重新掛號了。
  那么你會發(fā)現(xiàn)一旦程序有了空閑時間段,數(shù)據(jù)庫就會不繼續(xù)等待了,直接用timeout這個參數(shù)把你的連接給掐斷了,需要你從頭再來。這個很好理解,比如你在昨天看了醫(yī)生,醫(yī)生也不可能一直記得你,也不可能一直等你,只有到了你再去的時候,重新掛號然后再和白衣天使一起討論病情。那么你有可能會問,那么如果是比較復(fù)雜的病情,一會要拍個片,一會要驗血,其中都需要等待時間,那么拿了報告,醫(yī)生又讓我掛號,驗證身份,豈不是很煩?那有沒有一個比較人性化的制度可以讓這些頻繁的檢查能夠管理起來,那么我們就來看第二個場景。
  02、第二個場景:
  單個進程,需要頻繁交互的數(shù)據(jù)庫
  之前我們討論那種需要等化驗結(jié)果,多次詢問醫(yī)生的場景。那么映射到數(shù)據(jù)庫,就是說單個進程,需要頻繁的訪問數(shù)據(jù)庫。這個其實有兩個思路可以解決,第一種是把timeout的參數(shù)調(diào)的大一點其實就好了。這個沒錯,但是也存在一定安全和資源浪費,比如這個長連接會不會被非法占用,寶貴的數(shù)據(jù)庫連接數(shù)是不是會被長時間占用,這些都是問題。那么第二個思路是,由一個中間人來協(xié)調(diào)所有的連接,同時讓這些連接不會超時,同時也可以免去某一個進程需要頻繁交互,頻繁驗證握手等,給程序帶了很多等待時間。那么這種中間人的技術(shù)就叫做連接池,它的作用就相當于一共有10個醫(yī)生坐班,連接池就是一個醫(yī)導(dǎo)(可以是人,也可以是醫(yī)院的信息化系統(tǒng)),事先都和這些醫(yī)生很熟,建立了信任的連接,那么病患只要和這個醫(yī)導(dǎo)建立連接,掛號驗證身份,就能做完各種化驗,繼續(xù)找醫(yī)生看病,省卻了很多流程上的時間。那么再數(shù)據(jù)庫的技術(shù)上有很多這些連接池的技術(shù),比如DBUtils,PySQLpool等再python上使用比較頻繁的模塊。這次我們就以DBUtils來給大家講解一下。
  1.先看一下大概的概念,對比一下醫(yī)導(dǎo)和連接池的類似概念。如圖上顯示的連接池在第一次驗證之后,把所有的連接都放在它的大池子里,應(yīng)用端不用每次都走一遍繁瑣的流程,如果要在一個交易或者業(yè)務(wù)邏輯里頻繁增刪改查幾十次,那么完全可以省下來之前這么多步驟,應(yīng)用速度大大提升。
  2.那么接下來, 用DBUtils來建立一個9個連接的連接池,數(shù)據(jù)庫timeout參數(shù)還是30s不變,然后我們同樣休眠60s,發(fā)現(xiàn)繼續(xù)使用conn1還是可以連接,說明數(shù)據(jù)庫連接池并沒有釋放掉原來的連接,而是緩存在了連接池之中。連接池一直保持這和數(shù)據(jù)庫的硬連接,這個“硬”連接是真正走過所有的握手協(xié)議身份驗證的,而應(yīng)用和連接池的連接則是軟連接是放在一個緩存池中里的。當然你還能定義有多少硬連接是在連接池建立完之后一直保留著的,這樣會對突發(fā)的軟連接有一定的幫助。
  3.一旦設(shè)置了連接池,就比較完美解決了單進程的頻繁訪問問題了。那么你可能會問,如果是多進程怎么處理呢?連接池可以完美解決這個問題嗎?接下來我們來看看下一個場景。
  03、第三種場景:
  多進程訪問數(shù)據(jù)庫
  一般在顯示問題里,資源都是比較緊俏的。資源不緊俏說的好聽是冗余度高,防范黑天鵝,說的不好聽就是浪費,但是這個平衡點確實很難掌握。那么我們現(xiàn)在討論的場景就是資源相當緊俏的數(shù)據(jù)庫連接,要被很多進程頻繁同時訪問。比如現(xiàn)在是流行病高發(fā)時期,醫(yī)院看呼吸道疾病的醫(yī)生可能只有10個人,但是同時要看病的患者可能成百上千,那么怎么樣才能讓這些心急火燎的病患能夠看病治療呢?那么醫(yī)導(dǎo)這個系統(tǒng)可以記住所有來訪的病人,知道哪些可以先去做血液檢查,哪些在這個空隙,可以找醫(yī)生看片子,那么10個醫(yī)生的效率得到了最有話。只需要醫(yī)導(dǎo)系統(tǒng)與這10個醫(yī)生連接,所有的病人信息都緩存在醫(yī)導(dǎo)這里;而不需要病人直接和醫(yī)生建立連接,那么效率就是等10個病人全部檢查完畢,才能看接下來的病人,效率會十分的緩慢。
  1.現(xiàn)在我們先看一下, 如果不做任何共享連接的方式。也就是說到了連接上限就掐斷,所有應(yīng)用被勸離。
  2.先看一下目前Azure MySQL的設(shè)置的連接數(shù)上限是10(當然這個不是最大值,最大連接數(shù)隨著你選擇的實例大小而變化)
  3.初始化連接池的時候,不選共享連接, 參數(shù)上Blocking放成False。啟動20個并發(fā)的線程
  4.沒有共享等待連接機制的情況下,超出連接數(shù)的線程就報錯了。
  5.那么現(xiàn)在我們把等待緩存機制換上,那么并發(fā)來的線程就能夠等待之前的線程釋放資源后,繼續(xù)使用有限的連接數(shù)。這樣就達到了一個緩存池的作用。同樣的道理,如果我們醫(yī)生醫(yī)院不夠大的時候,就可以建立很多簡易或者野外的醫(yī)院,隔離病房等,讓看病的病患先得到妥善安置,然后在按需就醫(yī)。
  6.現(xiàn)在我們把緩存機制打開,把Blocking參數(shù)置成True。發(fā)現(xiàn)即使有20個進程同時并發(fā),也會通過連接池緩存技術(shù),妥善把所有進程完成,達到共享10個連接數(shù)的可能性。
  場景總結(jié)
  最后我們來總結(jié)一下前面三個場景。第一個場景是單進程非頻繁訪問,所以每一次訪問都需要做一次數(shù)據(jù)庫連接,會消耗一定資源和數(shù)據(jù)庫連接數(shù)量。那么第二個場景是單進程,但是頻繁訪問,引入了數(shù)據(jù)庫連接池的概念,可以事先維護好一定數(shù)量的連接池,不用每次訪問都去建立一次連接,那么頻繁訪問的速度得到了保證。第三種場景的問題是如果是多進程的訪問情況,連接數(shù)量會不夠,這個時候引入了連接池緩存等待機制,就很好的解決了高并發(fā)多進程的問題。所以在什么場景下選擇什么樣的技術(shù)方案是至關(guān)重要的。
  要解決數(shù)據(jù)庫連接或者看病難這種緊缺資源的問題,需要用到一些中間調(diào)劑人或者系統(tǒng),那么這個系統(tǒng)是用公平的輪詢機制,隨機數(shù)機制,還是帶有權(quán)重的機制,就涉及到資源分配的大問題了。設(shè)計系統(tǒng)的時候一定要把這些因素考慮進去,那么愿天下系統(tǒng)安穩(wěn),一切苦厄消散。
  最后,提供本文技術(shù)參考指南及MySQL 連接池代碼供各位查閱:
  DBUtils 用戶指南:
  https://cito.github.io/DBUtils/UsersGuide.html#id2
  代碼傳送門:
  https://github.com/jurejoy/MySQLconnectionpool


 
【免責聲明】本文僅代表作者本人觀點,與CTI論壇無關(guān)。CTI論壇對文中陳述、觀點判斷保持中立,不對所包含內(nèi)容的準確性、可靠性或完整性提供任何明示或暗示的保證。請讀者僅作參考,并請自行承擔全部責任。

專題

CTI論壇會員企業(yè)