通用中小企业架构设计思路

  在上一篇博客中(浅谈微服务架构与.Net Core)我们谈到微服务架构与.Net Core,大体分析了下微服务架构的一些优势,在这边博客中,将谈谈架构设计的一些理念。
  
  首先,代码要清晰明了,层次分明,模块间耦合度要尽量降低,代码并不是要越复杂越好,可能有人认为,代码写得越复杂、算法用的越高级,让别人越看不懂就越牛X,我认为恰恰相反,代码越是简单就能实现的就尽量做到简单,能用几行代码能解决的问题何必要写个牛X的算法来实现呢?
  
  其次,能做到通用的模块需要单独提炼出来,不要在其他业务逻辑中混合实现,不利于代码的移植,以下简单说说常用的一些模块或逻辑需要特别注意的;
  
  1、底层数据访问需要单独写,当我们数据库发生变化,比如我们这个项目用的是SqlServer,下个项目用的是MySQL,要做到很轻易的切换;
  
  2、缓存管理需要独立出来,通常,我们开发都会用到缓存技术,能把缓存用好,系统性能也会得到大幅度提升,简单举个例子,比如我们开发一个系统,用的是MemoryCache,但是系统上线运行一段时间后,并发量增大,本机缓存已经不能满足需求,我们需要对系统进行集群,减轻服务器压力,此时需要用Redis来管理缓存,那么此时,我们需要做到很容易的从MemoryCache切换到Redis来做缓存管理,我们只需要改一下配置文件就能达到预期效果而不必在用到缓存的地方一个一个的去改再编译上线。
  
  3、日志模块需要独立出来,不管是错误日志还是操作日志,这基本每个系统都会用到的,我们可以借用一些第三方的开源日志系统来实现,比如ELK开源日志管理系统(后面再介绍如何整合)
  
  4、权限管理,这对于每个系统来说都必不可少,但很多权限都和自己公司的一些行政制度相关,都有一些不通用的权限管理功能,比如涉及到数据权限的管理,此时,我们可以将功能权限的管理独立出来,这一块可以达到通用,功能权限独立后,我们在开发新的系统的时候就不必再关心功能权限的问题,甚至都不需要将这一模块移植到新项目中,直接将权限的接口开放出来,新系统直接调用即可;
  
  第三,跨平台的支持,当然 .Net Core 就能很好的支持跨平台的移植;
  
  第四,易扩展,随着不同业务的开发,系统架构必须要支持对一些功能的扩展;
  
  [root@192 ifstat-1.1]# jstack 4294 | grep 10c7 -A60
  
  "main" #1 prio=5 os_prio=0 tid=0x00007f7f68009000 nid=0x10c7 runnable [0x00007f7f6f117000]
  
  java.lang.Thread.State: RUNNABLE
  
  at java.io.FileOutputStream.writeBytes(Native Method)
  
  at java.io.FileOutputStream.write(FileOutputStream.java:326)
  
  at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
  
  at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
  
  - locked <0x00000000e2e0e6e0> (a java.io.BufferedOutputStream)
  
  at java.io.PrintStream.write(PrintStream.java:482)
  
  - locked <0x00000000e2e0bbd8> (a java.io.PrintStream)
  
  at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)
  
  at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)
  
  at sun.nio.cs.StreamEncoder.flushBuffer(StreamEncoder.java:104)
  
  - locked <0x00000000e2e0e800> (a java.io.OutputStreamWriter)
  
  at java.io.OutputStreamWriter.flushBuffer(OutputStreamWriter.java:185)
  
  at java.io.PrintStream.newLine(PrintStream.java:546)
  
  - eliminated <0x00000000e2e0bbd8> (a java.io.PrintStream)
  
  at java.io.PrintStream.println(PrintStream.java:737)
  
  - locked <0x00000000e2e0bbd8> (a java.io.PrintStream)
  
  at JavaDemo2.main(JavaDemo2.java:4)
  
  "VM Thread" os_prio=0 tid=0x00007f7f68080000 nid=0x10d0 runnable
  
  "GC task thread#0 (ParallelGC)"www.chenghylpt.com  os_prio=0 tid=0x00007f7f6801e800 nid=0x10c8 runnable
  
  "GC task thread#1 (ParallelGC)"www.jiuzhoyulpt.cn os_prio=0 tid=0x00007f7f68020000 nid=0x10c9 runnable
  
  "GC task thread#2 (ParallelGC)"www.qianshenyule.com  os_prio=0 tid=0x00007f7f68022000 nid=0x10ca runnable
  
  "GC task thread#3 (ParallelGC)"www.lanboyulezc.cn os_prio=0 tid=0x00007f7f68024000 nid=0x10cb runnable
  
  "GC task thread#4 (ParallelGC)"www.shicaiyulezc.cn os_prio=0 tid=0x00007f7f68025800 nid=0x10cc runnable
  
  "GC task thread#5 (ParallelGC)" www.LanboyLgw.com os_prio=0 tid=0x00007f7f68027800 nid=0x10cd runnable
  
  "GC task thread#6 (ParallelGC)"www.lanboylpt.cn os_prio=0 tid=0x00007f7f68029800 nid=0x10ce runnable
  
  "GC task thread#7 (ParallelGC)" os_prio=0 tid=0x00007f7f6802b000 nid=0x10cf runnable
  
  "VM Periodic Task Thread" os_prio=0 tid=0x00007f7f680e8000 nid=0x10d9 waiting on condition
  
  JNI global references: 5
  
  以上就是我对系统架构设计的一些简单看法,当然还有另外一些模块或功能没讲,因为有可能很多小型团队没有用到,比如系统性能的分析、监测等,若有说的不对的地方欢迎多多指教!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值