十萬的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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...