Skip to main content

JBoss BRMS - 最佳化流程實作層(Process Implementation Layer)的小技巧

Eric 曾經寫過一些Migration 策略,也較仔細地看過各個流程層面的應用,和提供jBPM 的最佳化建議。以上都是在談論BPM 中特定部分的策略。現在,重新的從一個智能化,整合的企業級系統角度來看,要如何可以更完善的使用JBoss BRMS 去更控制管理你的商業流程呢。


Introduction 簡介
首先,要先把整個BPM 的專案從大的架構往下看,可以大概把整個專案區分成一層一層,像洋蔥一樣不同的層面。從比較仔細的角度去看要怎麼樣建立一個可以有彈性,日後很好維護與擴展的專案。下面的圖一就是表示在一個專案中,可以細分的不同元件的層次,
  • Process Initialization Layer 流程初始層
  • Process Implementation Layer 流程實作層
  • Process Repository 流程儲存庫
  • Tooling for business users & developers 開發人員與普通使用者的工具
  • Console, reporting & BAM dashboards 控制台,報表與 BAM 儀表板
  • Process Interaction Layer 流程交會層

流程初始層 Process Initialization Layer 的部分,提供你,你的顧客之間如何初始化流程的的最佳化的建制方式請參考連結

Process Implementation Layer 流程實作層,是維護流程的位置。普通的使用者與開發的苦命人員可以利用流程儲存庫,工具去設計這些流程。 在這裡你還可以看到實作類,比較細節的內容,像是一些在專案裡面為了要應付特別的node而產生的專業領域的延伸程式。

控制台,報表與 BAM 儀表板元件也是延伸的工具,在專案中通常是用來輔助商業的使用者,提供有商業價值的資訊,讓他們可以利用這些資料下出正確的商業決策。這個之後再來談。

最後,Process Interaction Layer 流程交會層,這一層你的流程將會實際地去連接不同的legacy系統,辦公室系統,服務層,商業邏輯系統,或是一些其他第三方的系統與服務。請期待它的Best Practice

Process Implementation Layer 流程實作層


這一層專注在你的商業流程設計,客制的在流程中的action, 還有因應你的需求所衍生擴展出來的流程。 藉由採用標準的BPMN 2 去設計和執行流程讓在商業流程管理的架構上免去很多在這一層會遇到的鳥事。強迫流程引擎使用以及支援BPMN2 這個標準讓你在設計流程時,必須遵循一定的規則,才不會導致流程變得雜亂無章,無法管理。


Knowledge Sessions (這個我不想翻,因為我找不到合用的中文)

在JBoss BRMS 商業流程管理(BPM)的元件中,有一個特別有趣讓流程的架構以及它的擴展度可以變的非常有彈性。這就是 Knowledge Session (KS)的概念,特別是Stateful(有狀態的) Knowledge Session (SKS).。這個專門用來儲存你的流程資料,像是執行的data 以及一個專門執行你的流程特定的instance. 

當執行一個以商業規則為架構(rule-base)的應用程式,通常都是跑一個單一的 KS (注意,不是stateful 的呦!),在那個單一個KS裡去利用你的rule 去跑你的data (資料)。 如果是 SKS 與流程,那每個instance 都要有一個獨立的SKS了。 我們可以把這些功能包成一包,放到一個服務裡面,這樣才可以達到concurrent (同時很多個並行)的效果,讓流程instance 的生命週期管理更簡單。 在這個service 裡面,你可以順便看需求去內建一個同步或是非同步的商業活動管理(BAM) 的事件產生器。




Conclusion 結論

以上大概把商業流程管理(BPM)的架構說明了一下,還有解說了不同階層之間的關係與互動。我們稍微看了一下流程實作層 (Process Implementation Layer) 的最佳化小技巧。主要是SKS, 我們建議不要只是用,而是在單一服務下管理流程instance的生命週期。在這個之外,這裡是一個幫你的分流 BAM event 的負載很好的一個起始點。接下來還會有更多的文章討論流程交會層(Process Interaction Layer ),流程儲存庫(Process Repository ),工具還有報表BAM層喔。敬請期待。

Part 1Part 2, Part 3


Comments

Popular posts from this blog

Red Hat Fuse - Announcing Fuse 7 Tech preview 3 release.

Red Hat Fuse 7.0 technical preview three is out today! On the pathway to become one of the best cloud-native integration platform, Fuse gives developer freedom to choose how they want to develop the integration solution, where they want to deploy it and capabilities to address new integration personas that do not have development experience.
By supporting the three major runtime, developer is free to work on the runtime of their choice.By supporting standalone and cloud deployment, it simplifies the complexity to distinguish between these environments, allowing application to deploy freely among the environment of your choice. All levels of developers are welcome, you can either dive deep into creating customize complex integration logic, or using the new low code platform to quickly build a simple integration. In this Tech Preview release you get it all.
Fuse StandaloneSpring-boot for microserviceKaraf 4 for OSGi loverJBoss EAP for JavaEE developersFuse on OpenShiftPlugins for easy co…

JBoss EAP 6 - 效能調校 (一) DataSource 的 Connection Pool

效能沒有什麼Best Practice, 反正能調整的就那些。 通常,一個程式的效能大概有70-80% 都跟程式怎麼寫的其實比較有關係。

最近我最疼愛的小貓Puji 因為膀胱結石開刀的時候過世了,心情很差請原諒我的口氣沒有很好,也沒有心情寫部落格。

Puji R.I.P.

=======================正文=======================

這個題目很多人叫我寫,可是這題目好大,這分明就是整死我咩~
所以我會分幾段慢慢寫。

JBoss 的 SubsystemDatasource WebWeb Service EJB Hibernate JMSJCAJVM 調校OS (作業系統)

先來看一下 DataSource Subsystem, DataSource 的部分主要是針對Connection Pool 做調校。

通常,程式都會需要跟資料庫界接,電腦在本機,尤其是在記憶體的運算很快,但是一旦要外部的資源連接,就是會非常的耗資源。所以現在的應用程式伺服器都會有個Pool 放一些先連接好的 資料庫connection,當程式有需要的時候就可以馬上提供,而不用花那些多餘的資源去連接資料庫。

這就是為什麼要針對Connection Pool 去做調校。

以下會討論到的參數,都是跟效能比較有關係,Datasource 還有很多參數,像是檢核connection 是否正確的,我都不會提到。如果你追求的是非常快速的效能,那我建議你一個檢核都不要加。當然,這樣就會為伺服器上面執行的程式帶來風險。這就是你要在效能與正確,安全性上面的取捨了。 (套句我朋友說的話,不可能又要馬兒好,又要馬兒不吃草的..)

最重要的調校參數就是 Connection 的 Pool 數量。(也就是那個Pool 裡面要放幾條的connection.) 這個參數是每一個應用程式都不一樣的。

min-pool-size 

Connection Pool 最少會存留的connection 數量

max-pool-size 

Connection Pool 最多可以開啓的 connection 數量

prefill

事先將connection pool 裡面建立好min-pool-size 的connection.

我的建議是觀察一下平常程式要用到的量設定為 min-pool-size 。
加上…

JBoss Fuse - Fuse workshop 101 - Part One

On my way to Hong Kong for a day of workshop on JBoss Fuse, and as I go through my Slide deck, I cannot find any decent easy workshop for beginners. Therefore I decide make a workshop that is easy for Camel first timer to get their hands dirty.

The first of part of the workshop is an introduction to Camel, it first goes through what is exactly inside JBoss Fuse.

For part one of the workshop, it takes your through the very basic of Camel, one of the very important component inside JBoss Fuse.
Every Camel need to have a runtime container to run in, inside camel we call it a CAMEL CONTEXT.  Inside every Camel context, you can define lots of camel route and registry, don't worry about what those are, we will explain later.


So inside out blueprint xml, you will see a tag called camelContext.



Next up is camel route, they are a chain of command or process defined by you, as a developer.
Inside the camel route, there are consumer endpoints that listens to the incoming messages, producers …