Re: [討論] 系統越開發越多,負責的東西越來越多
微服務似乎可以改善一點這方面的問題
系統開發有點像是公司還很小的時侯
當你公司還很小的時侯
某個職員要當客服 又要兼倉管 又要兼銷售
所以這個職員可以拿到各種不同的數據
當公司開始變大以後
就會有財務部 客服部 商品部
每個部門的數據再也不像小公司時可以任意取得
每個部門內部各自處理管理
其他部門不用管另一個部門也不用知道他們怎麼管理
部門之間的溝通要透過窗口或部長
當系統一開始小的時候
就像小公司校長兼撞鐘
一包系統可以同時去存取會員資料與商品資料與物流資料
當系統變大以後
其實也應該像小公司變大公司那樣劃分不同部門
把各個不同性質的資料抽出來變成微服務
這樣的好處就是減少耦合
服務內部不管如何改變
只要對外保持一致就不用擔心
如果有那種萬年不用更動的服務
那就讓他安靜的待在角落 不要管他
新進人員也不用花心力去理解那個服務
每個服務很小
小就代表容易理解也容易測試也容易改動
不同部門的資料互相隔離 也更安全
一間公司變大很自然就會劃分成各個部門
一個系統變大非程式人員卻不容易理解為什麼要拆開成不同包
想像有一間 5000人的大公司
每個人都可以任意去各部門拿資料拿數據
而任何部門有任何變動都要想辦法去確定這5000人都確定這個變動
這就是程式的世界
系統寫久了 5000支程式是有可能的
任何變動都要確定這5000程式沒受影響
那改起來就是災難
自然而然很不想去亂動
或者動不動就想重寫
用公司變大去解釋或許可以讓人理解
公司變大了要有不同部門
可以把部門的小變動固定在某個部門內
不會去影響全公司
當然微服務要弄起來也要有一些成本
所以小公司才校長兼撞鐘
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.170.183.199 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1699539414.A.6D2.html
→
11/09 22:52,
1年前
, 1F
11/09 22:52, 1F
→
11/09 23:46,
1年前
, 2F
11/09 23:46, 2F
→
11/10 00:27,
1年前
, 3F
11/10 00:27, 3F
噓
11/10 01:22,
1年前
, 4F
11/10 01:22, 4F
推
11/10 01:28,
1年前
, 5F
11/10 01:28, 5F
噓
11/10 01:35,
1年前
, 6F
11/10 01:35, 6F
其實我不是在講很嚴格的微服務
微服務如果單論工具的話
其實spirng cloud 出的工具
大概花一點時間學不會太難
工具主要是提供服務之間的溝通與發現
其實就是一些工具設定
但我覺得微服務主要的難點有二個
一個是 服務怎麼切
以及
系統小時候你沒機會用微服務 系統大的時成本太大
服務怎麼切有一個作法是DDD
裡面又延伸很多術語
DDD是早於微服務的
我也不是全部都懂就不多說了
DDD的副標是
軟體核心複雜度的解決方法
我覺得這個才是治本的作法
有很多管理複雜度的作法
比如說去code review 人員教育
都是比較事後 且要公司有餘裕的條件下才能做的治標作法
我是覺得程式會亂是出於每個人的思考都是不同的
還有時間壓力
所以要靠事後的管理來維持程式的不混亂是很難的
而且成本不小 可以提昇品質 但很難維持
換個主管說不定政策就變了
有的程式是老鳥寫的 早已離職
有的程式是菜鳥寫的 沒辦法寫的好
時間壓力下能動就上線是台灣公司常態
另外程式的寫法有百百種
不同的思考也可以完成相同的目的
這也是程式的一種亂
既然亂是改變不了的
那我們就不該想的是讓他不亂
而是說亂是一定會亂的 但是控制他的大小
就像你有一個像汽車一樣大的毛線球
非常紊亂而且預期汽車毛線球還會一直長大
VS 你有300顆棒球大小的毛線球
而主要核心的毛線球可能十來顆
你控制的不是亂 而是大小
很小的毛線球再怎麼亂你也有能力救
另一個難題就是系統很大時才要改微服務
比如說把會員服務抽出來(不同DB)
你以前撈會員資料是用sql撈
現在要改用token串api接json
那可能5000支程式裡有幾百支直接間接用到的程式都要改
花半年改了以後
老闆問你花半年的時間 系統怎麼沒有任何變化
所以我也不是鼓勵大老系統去改這個
而是說
作法上概念可以往這方面接近
例如新的業務就不要再加在原來的大老系統上
總之
我不是在講很嚴格定義的微服務
而是在說
控制系統越來越大越來越亂的方法
可以有兩個維度
一個做法是專注在讓它不要亂
另一個是專注在讓它不要長大
想辦法讓他不要長大
小東西就算亂 也亂不到那裡去
有天你想好好整理 小東西也是看得到隧道的光亮
控制大小是利用框架與工具
控制品質則是主管與人的思考教育
我是覺得控制大小才是長遠的解決之道
但也不是說兩者衝突
其實也可以並行
只是在不同時間點的優先順序不同
推
11/10 03:06,
1年前
, 7F
11/10 03:06, 7F
推
11/10 06:05,
1年前
, 8F
11/10 06:05, 8F
→
11/10 06:05,
1年前
, 9F
11/10 06:05, 9F
推
11/10 08:10,
1年前
, 10F
11/10 08:10, 10F
→
11/10 08:10,
1年前
, 11F
11/10 08:10, 11F
→
11/10 08:10,
1年前
, 12F
11/10 08:10, 12F
→
11/10 08:10,
1年前
, 13F
11/10 08:10, 13F
→
11/10 08:12,
1年前
, 14F
11/10 08:12, 14F
→
11/10 08:12,
1年前
, 15F
11/10 08:12, 15F
→
11/10 08:12,
1年前
, 16F
11/10 08:12, 16F
推
11/10 09:12,
1年前
, 17F
11/10 09:12, 17F
推
11/10 09:26,
1年前
, 18F
11/10 09:26, 18F
→
11/10 09:26,
1年前
, 19F
11/10 09:26, 19F
噓
11/10 09:39,
1年前
, 20F
11/10 09:39, 20F
→
11/10 09:40,
1年前
, 21F
11/10 09:40, 21F
→
11/10 09:42,
1年前
, 22F
11/10 09:42, 22F
推
11/10 10:16,
1年前
, 23F
11/10 10:16, 23F
推
11/10 11:15,
1年前
, 24F
11/10 11:15, 24F
→
11/10 11:15,
1年前
, 25F
11/10 11:15, 25F
→
11/10 11:15,
1年前
, 26F
11/10 11:15, 26F
→
11/10 11:15,
1年前
, 27F
11/10 11:15, 27F
→
11/10 11:17,
1年前
, 28F
11/10 11:17, 28F
→
11/10 11:31,
1年前
, 29F
11/10 11:31, 29F
→
11/10 11:31,
1年前
, 30F
11/10 11:31, 30F
推
11/10 11:35,
1年前
, 31F
11/10 11:35, 31F
→
11/10 11:35,
1年前
, 32F
11/10 11:35, 32F
→
11/10 11:36,
1年前
, 33F
11/10 11:36, 33F
推
11/10 12:20,
1年前
, 34F
11/10 12:20, 34F
推
11/10 12:22,
1年前
, 35F
11/10 12:22, 35F
→
11/10 12:22,
1年前
, 36F
11/10 12:22, 36F
→
11/10 13:07,
1年前
, 37F
11/10 13:07, 37F
→
11/10 13:07,
1年前
, 38F
11/10 13:07, 38F
推
11/10 13:09,
1年前
, 39F
11/10 13:09, 39F
推
11/10 15:31,
1年前
, 40F
11/10 15:31, 40F
推
11/10 15:43,
1年前
, 41F
11/10 15:43, 41F
→
11/10 17:26,
1年前
, 42F
11/10 17:26, 42F
→
11/10 17:27,
1年前
, 43F
11/10 17:27, 43F
推
11/10 17:28,
1年前
, 44F
11/10 17:28, 44F
→
11/10 17:51,
1年前
, 45F
11/10 17:51, 45F
推
11/10 18:42,
1年前
, 46F
11/10 18:42, 46F
→
11/10 18:42,
1年前
, 47F
11/10 18:42, 47F
→
11/10 18:42,
1年前
, 48F
11/10 18:42, 48F
→
11/10 18:42,
1年前
, 49F
11/10 18:42, 49F
→
11/10 18:42,
1年前
, 50F
11/10 18:42, 50F
→
11/10 18:42,
1年前
, 51F
11/10 18:42, 51F
推
11/10 20:24,
1年前
, 52F
11/10 20:24, 52F
→
11/10 20:24,
1年前
, 53F
11/10 20:24, 53F
→
11/10 20:24,
1年前
, 54F
11/10 20:24, 54F
推
11/10 20:28,
1年前
, 55F
11/10 20:28, 55F
→
11/10 20:28,
1年前
, 56F
11/10 20:28, 56F
→
11/10 20:28,
1年前
, 57F
11/10 20:28, 57F
→
11/10 20:28,
1年前
, 58F
11/10 20:28, 58F
推
11/10 21:19,
1年前
, 59F
11/10 21:19, 59F
→
11/10 21:19,
1年前
, 60F
11/10 21:19, 60F
→
11/10 21:19,
1年前
, 61F
11/10 21:19, 61F
→
11/10 21:19,
1年前
, 62F
11/10 21:19, 62F
→
11/10 22:12,
1年前
, 63F
11/10 22:12, 63F
→
11/10 22:12,
1年前
, 64F
11/10 22:12, 64F
綜合說一下想法
我沒在國外待過所以只是猜想與淺見
國外會流行微服務應該是因為流量
因為微服務被設計成很容易自動擴展
而微服務可以針對核心流量業務去擴展
比如購物網站的流量可能集中在商品服務
那會員服務就沒必要用相同的規模去擴展
針對某服務更有效率的擴展 也更省錢
國外有流量的公司自然也有人手去做微服務
就變成正的循環
而台灣2300萬人很少有大到需要去做微服務的流量
沒有流量也就沒錢請夠多的IT去搞微服務
之所以沒提微服務的其他優點
是因為我也不是在在推微服務
而是在講越來越大 越來越亂的系統該怎麼處理比較好
程式的很多概念都很像
只是名詞不一樣
實務作法不一樣
但這些不同也是很關鍵的不同
比如說模組化也是一種拆分重用
但還是不一定能避免混亂
例如新人根本不知道有這個模組
或者老人知道 但不想用這個模組
可能覺得要再加工嫌麻煩之類的
自己直接寫方法處理比較快
久而久之類似的模組與方法一堆
也是亂
還是要依靠教育訓練與老鳥的品德
但如果從物理上就去阻絕
資料根本不在相同的DB上
這才能更有力量去阻絕混亂
觀念會紅起來一定有他的道理
如果台灣因為流量沒那麼大就捨棄這個觀念就有點可惜
如果原生目的不是為了處理流量 未來也不會
那就不用做很嚴格完整的微服務
但可以去接近
不同業務 不同AP 不同DB
用物理阻絕混亂
在人類的世界
如果一個公司成長到十幾人
而不劃分部門就容易查覺混亂
權責問題 安全問題 命令傳導混亂
自然而然就會把人劃分成不同部門工作
但一些沒寫過程式的主管卻不容易理解程式為什麼會亂
你改一個變動
理論上要測過所有的程式
都還不一定能保證沒問題
改一個變動要確認5000支程式都沒受影響
VS
改一個變動只要確認50支程式沒受影響
這是工作心理健康問題
50支程式你會更願意去把它變得更好
5000支程式你會想說不要亂動 能跑就好
或者你會想說
我搞懂這5000支程式都要半年以後了
不如我們重寫某一塊比較快
所以保持服務儘量小
那應該是很自然的
權衡取捨
就像小公司校長兼撞鐘
大公司有不同部門那樣
如果你是永遠的小公司
或者你是大公司但業務固定不會擴展
作業流程萬年不變
那其實也沒必要特意再花時間去劃分不同部門
的確是不適用所有的情況
※ 編輯: chal (1.170.183.199 臺灣), 11/11/2023 00:05:00
→
11/11 12:51,
1年前
, 65F
11/11 12:51, 65F
→
11/11 12:52,
1年前
, 66F
11/11 12:52, 66F
→
11/11 12:52,
1年前
, 67F
11/11 12:52, 67F
→
11/11 12:53,
1年前
, 68F
11/11 12:53, 68F
→
11/11 12:53,
1年前
, 69F
11/11 12:53, 69F
→
11/11 12:56,
1年前
, 70F
11/11 12:56, 70F
→
11/11 12:56,
1年前
, 71F
11/11 12:56, 71F
→
11/11 12:57,
1年前
, 72F
11/11 12:57, 72F
→
11/11 12:58,
1年前
, 73F
11/11 12:58, 73F
→
11/11 13:01,
1年前
, 74F
11/11 13:01, 74F
→
11/11 13:01,
1年前
, 75F
11/11 13:01, 75F
推
11/11 14:38,
1年前
, 76F
11/11 14:38, 76F
噓
11/11 15:46,
1年前
, 77F
11/11 15:46, 77F
→
11/11 15:47,
1年前
, 78F
11/11 15:47, 78F
→
11/11 16:35,
1年前
, 79F
11/11 16:35, 79F
推
11/11 20:10,
1年前
, 80F
11/11 20:10, 80F
推
11/12 12:39,
1年前
, 81F
11/12 12:39, 81F
→
11/12 12:39,
1年前
, 82F
11/12 12:39, 82F
→
11/12 12:39,
1年前
, 83F
11/12 12:39, 83F
→
11/12 12:39,
1年前
, 84F
11/12 12:39, 84F
→
11/12 12:39,
1年前
, 85F
11/12 12:39, 85F
噓
11/12 13:33,
1年前
, 86F
11/12 13:33, 86F
→
11/12 13:33,
1年前
, 87F
11/12 13:33, 87F
推
11/13 22:04,
1年前
, 88F
11/13 22:04, 88F
→
11/14 02:48,
1年前
, 89F
11/14 02:48, 89F
→
11/14 02:49,
1年前
, 90F
11/14 02:49, 90F
→
11/14 02:52,
1年前
, 91F
11/14 02:52, 91F
推
11/14 19:19,
1年前
, 92F
11/14 19:19, 92F
→
11/14 19:20,
1年前
, 93F
11/14 19:20, 93F
→
11/15 15:02,
1年前
, 94F
11/15 15:02, 94F
討論串 (同標題文章)
完整討論串 (本文為第 5 之 5 篇):
42
148
Soft_Job 近期熱門文章
PTT職涯區 即時熱門文章
133
157