十萬的License只取決於一個連接

来源:https://www.cnblogs.com/ihula/archive/2019/04/14/10706306.html
-Advertisement-
Play Games

前段時間看到一份代碼,小規模、低難度的一個應用,MVC用到極致,業務邏輯卻混成一團麻,應該是中了培訓班的毒。現在的程式員,大多是沒仔細讀過《現代操作系統》,沒看過編譯原理,不知道堆與棧,沒怎麼用過C、C++,上手就Java、C#,程式一開就記憶體狂飆,資料庫連接隨手就建,但這種人算是相當多了,見多了也 ...


前段時間看到一份代碼,小規模、低難度的一個應用,MVC用到極致,業務邏輯卻混成一團麻,應該是中了培訓班的毒。現在的程式員,大多是沒仔細讀過《現代操作系統》,沒看過編譯原理,不知道堆與棧,沒怎麼用過C、C++,上手就Java、C#,程式一開就記憶體狂飆,資料庫連接隨手就建,但這種人算是相當多了,見多了也就習慣了。

前兩天看到一篇文章,作者使用的是InterSystems的資料庫,這是一個美國公司,為醫療衛生行業提供重要的網路平臺,不少國外的IVD廠商都有用到。作者描述的問題很簡單:

伺服器相當的不穩定,每天都會宕機。
掛了的時候所有的程式都連接不上資料庫,大概過10分鐘左右又好了!
找來找去說是資料庫的License不夠了,所以不讓新的連接上來,那就納悶了。雖然Intersystem公司賣的License賊貴,一個就要十萬塊,但是通過加上ECP,基本上就多出來1000個License Units,咋還會不夠用呢?

首先,License 授權是個相當複雜的計算方式,拿 SQL Server 來說,SQL Server不同的版本有不同的功能,不僅價格頗有差異,獲得許可的方式也不盡相同,高的有1萬9千多刀,總的來說,有兩種基本的授權(License)模式。

一、“每處理器”或“每核”模式
“每處理器”(Per Processor)授權模式只計算物理處理器的數量,與物理處理器的內核數量無關。按“每核”(Per Core)計數,同時還需要計算物理處理器(插槽)的數量,單個插槽最低需要購買4核。

這一授權模式可以很好的簡化授權的複雜程度,不用統計有多少用戶(或者設備)會訪問SQL Server,以及是防火牆內部還是來自Internet的外部連接。

二、“Server+CAL”模式
CAL即客戶端訪問許可(Client Access License),分為設備訪問許可(Device CAL)和用戶訪問許可(User CAL)兩類。SQL Server及其組件(例如報表服務)提供服務,客戶端則是訪問這些服務的設備或用戶。

購買CAL時需要考慮有多少客戶端需要訪問SQL Server並從中獲取數據,客戶端的計算方式與中間層無關,只與最終有多少客戶端能夠獲取(包括瀏覽、修改、刪除數據等)SQL Server伺服器中的數據有關。

標準功能每客戶端大概940刀。

回到主題,作者在License Usage 裡面看到License Usage by User,同一個IP對應多個連接數但是UserID還是一樣的,也就是說你開N個連接或者程式,UserID都是相同的,而且都是同一IP地址,當然,用的License也就是一個,但是,你會發現原來它會計算Connections,也就是連接數。
問題來了:

If the number of processes exceeds this maximum, a transition occurs and Caché begins allocating one license unit per process for that user ID. The system presumes that if more than maxconn connections are associated with a user ID, multiple users are accessing Caché through an intermediary, (for example, a firewall system) so additional license units are required. Therefore, when the (maxconn + 1) process starts, the number of license units allocated to that user ID changes from one to (maxconn + 1). Processes started by the Job command are allocated against the process limit of the user ID invoking the Job command.

原來一個License的進程數或者連接數是有最大限制的,如果超過這個最大限制的話,那就變成了每個連接都使用給一個單獨License,難怪伺服器會爆掉了。

比如我這邊看最大連接數是25。
那就很少了,設備啟動時候的用Job函數增加的進程也算在內,如果我們在這臺電腦啟動多個介面那就占用了多個進程數量了,萬一多開幾個程式,那完了,就爆了。

為啥有這個規定呢?
可能是為了控制你不用路由器的,如果你用路由的話對公網的IP地址都是一樣,Cache就沒法判斷你到底有多少個終端了。
對於這種問題能怎麼辦呢,只能想辦法優化一下連接數了。

這裡要吐槽一下,國內的LIS廠家開發人員的水平跟互聯網公司差十萬八千里,當然,也可以推到DBA身上,因為99.99%的LIS廠家和大部分的醫院都沒有DBA。無論是內部開發還是第三方調用,都是一個用戶,完全不考慮安全性問題,或者也有考慮安全性的,就是不開放數據訪問,也不提供介面,逼第三方去想歪招;不過我已經看到有些LIS廠家已經開始提供WebService介面了,雖然沒有遵循ASTM協議或HL7協議,但也是一個進步。
回到最前面說到問題,小應用場景或開發環境下,該做的優化不做,如果遇到這樣的問題呢,總不能讓客戶花十萬買License,只有優化連接數了,優化、測試的時間成本呢,客戶的時間成本呢,或者客戶能等你改好嗎?


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 谷歌向上滾動滾輪是正值,向下是負值,而火狐正好相反 完整測試代碼,分別用谷歌和火狐瀏覽器測試 ...
  • 閑聊 步入前端切圖仔行列的我曾多次糾結過「到底使用哪種編輯器寫前端好用?」這樣的問題,前前後後嘗試過 Dreamweaver 、HBuilder 、Sublime Text 、Atom 和現在主要使用的 VSCode 。現在回過頭來看,我發現這個問題有了答案,那就是「愛用啥用啥」。(笑…… 今天的主 ...
  • request、out對象使用 一、實驗目的 1、掌握代碼片段中的註釋的應用; 2、掌握JSP腳本標示 Java代碼片段的應用。 二、實驗內容 1、設計教師與學生不同登陸界面,如下圖; 2、驗證碼隨機生成; 3、提交後分別轉向教師頁面和學生頁面進行判斷用戶名和密碼正確性; 4、如果正確,3秒後,轉向 ...
  • 渲染機制 渲染機制主要分為兩部分: 首次渲染和更新渲染。 首次渲染 首先通過一個小例子,來講解首次渲染過程。 程式運行到 時,其中的 babel React.createElement(ClickCounter, null) element`如下: 接下來執行 函數,生成 節點。首先瞭解下 的部分數 ...
  • 原文首發: "行為型模式:解釋器模式" 十一大行為型模式之十:解釋器模式。 簡介 姓名 :解釋器模式 英文名 :Interpreter Pattern 價值觀 :不懂解釋到你懂​ 個人介紹 : Given a language, define a representation for its gra ...
  • 面向對象的詳細解讀 一、基本概念 1. 面向過程 (1) 概念:以過程為中心的編程思想,就是分析出解決問題所需要的步驟,然後用函數把這些步驟一步一步實現,使用的時候一個一個依次調用就可以了。 (2) 優點:極大的降低了寫程式的複雜度,只需要順著要執行的步驟,堆疊代碼即可。因為程式的流程很清楚,按著模 ...
  • 抽象工廠模式概述 定義:提供一個創建一系列相關或相互依賴對象的介面,而無需指定他們具體的類 抽象工廠抽象工廠,顧名思義,就是比工廠模式更抽象的工廠模式。在工廠模式中,一個具體工廠只負責生產一個具體產品。而在抽象工廠模式中,一個具體工廠可以生產一組相關的產品,這些產品稱為產品族,產品族中的每一個產品部 ...
  • 前言: 現在我們生活中已經離不開微信,QQ等交流軟體,這對於我們來說不僅是交流,更有在朋友圈中或空間中進行分享自己的生活,同時也可以通過這個渠道知道別人的生活。我們在看朋友圈的時候其實我們扮演的就是一個觀察者,朋友圈或空間里的動態可以看作是主體對象。接下來我們就介紹一下觀察者模式 一、定義 定義了對 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...