中文字幕无码久久精品,13—14同岁无码A片,99热门精品一区二区三区无码,菠萝菠萝蜜在线观看视频高清1

您當(dāng)前的位置是:  首頁 > 資訊 > 文章精選 >
 首頁 > 資訊 > 文章精選 >

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

2020-03-17 13:18:47   作者:   來源:   評論:0  點(diǎn)擊:


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

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


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

專題

CTI論壇會(huì)員企業(yè)