当前位置: 首页 > news >正文

小架构step系列01:小架构初衷

1 概述

小公司做业务服务,需要聚焦到实际的业务上,尽快通过业务服务客户,给客户创建价值,公司才能生存下去。在技术上采用的Web应用架构具备以下特点:
  • 主要由开源组件组装而成。这样既可以节省成本,也可以把时间聚焦到实际的业务当中,尽快实现业务。
  • 需要功能丰富,能够支持业务快速开发。数据量虽然不一定大,但业务可能很多,关系型存储、非结构化存储、文件存储、关键字搜索、任务调度、消息中间件等一个都不能少,每个都需要用。
  • 不需要支持大的“量”级。大多情况下不涉及大数据、高并发之类的,不能过度设计。
  • 成本要低。不能采用耗费资源过大的组件,客户服务器预算有限,大多只能提供一台或者一个双机的服务器。
这里把这种架构成为“小架构”,这个“小”主要是指小型,其内涵是很丰富的,其核心是要支持业务快速开发,功能丰富且好用。
为了支持业务快速开发,仅仅把一系列开源组件组合还不够,还需要:
  • 提供一个工程模版,把程序的启动、参数/返回值处理、异常处理等都规范好,可以直接开发业务。
  • 把开源组件的配置、启动等封装起来,给业务提供能够之间使用的服务。比如消息中间件,业务注入一个服务就可以发消息,不需要关心下面用的到底是Kafka还是RocketMQ,也不关心它们是如何配置的,如何启动的。
  • 提供一些通用的服务。有些是用开源软件不够易用的需要封装一下,有些没有开源软件提供能力的则自研一个。
  • 提供一套规范,大家在这规范下可以快速开发出一致的、易维护的代码,也能够减少一些踩坑的情况。
这系列“小架构”的文章就主要是讲解如何搭建这种“小架构”的,以及了解相关原理。

2 来由

2.1 一个机会

在一家公司里,受限于人力有限和维护成本,从零建设架构的机会一般是很有限的,不太会每个项目都重头搞个不同的架构,这对公司的发展和维护是非常困难的。这意味着在一家公司里,能够接触到架构变更的机会是非常有限的,可能待很长时间都不一定有一次。架构的变动也是慎之又慎,毕竟底层的东西影响范围比较大。当时间长了,架构本身就会积累很多东西,也就更加难改变了。
自己在一家公司待的时间很长,经历过几次架构改动,架构有在逐步迭代完善。但还是有不少东西受限于历史原因和业务当时的限制而不得不做的妥协,留下了各种各样的“遗憾”。经常会有点小小的感慨:如果这个能一开始就做好一点就好了。所以面对这种感慨,自己萌生了有没有可能重头再写一个的想法。在工作上不好说什么时候能有这种机会,但在业余上则是可以尝试一下,把自己的一些心得实践一下,也把一些自己觉得“遗憾”的地方纠正一下。

2.2 整理知识

做一件事情时间长的好处是这个事的全流程基本了解,里面有哪些坑和如何折中解决的也都了解。但也有个缺点,就是每次的迭代都是碎片化的,一个个知识就像一颗颗小珍珠一样散落到各个地方,总是感觉差一根绳子把这些零散的珍珠串接起来形成一个项链,也就是一个知识的体系。
借这个机会则可以把这些知识重新整理一下,把自己的一些思考记录下来,修正一些自己觉得不太好的地方,把自己之前了解的原理片段串联起来,从而形成一个小知识体系。

2.3 挑战

这种小架构,麻雀虽小却五脏俱全,要把里面的知识整理清楚,并不容易。一个东西好像是理解了,但如果要把它有条理的表达出来,难度就不在一个档次了。自己实际经历的不少东西是历史沉淀下来的,历史的局限也在里面,要把它的一些局限更换掉,既需要对局限的内容深入了解,也要钻研一些新的知识,才能把这些局限更换掉,这需要花不少时间。而在工作之外,时间本来就比较少,要把这个事情做成,挑战也比较大,需要自己给自己一股挤时间的劲,额外挤出足够的时间才有可能完成这个事情。把这个事列出来,也算是有一股监督的力量来推动一下自己。

2.4 局限

笔者并没有研究过各个公司的架构,很多理解也仅是一家之言,所以这系列的文章有比较多的局限性,整理出来既可以供大家参考,也可以向大家学习。欢迎交流和指正。
http://www.dtcms.com/a/264591.html

相关文章:

  • SQLMesh中的SQL模型:从基础定义到高级应用
  • 【网工|知识升华版|实验】1 登录华为设备并配置
  • 【Maven】Maven深度避坑指南:依赖冲突全维度解决方案与工业级实战(超万字解析)
  • 移动conda虚拟环境的安装目录
  • 超低功耗语音芯片有哪些?
  • 构建下一代云原生大模型多租户平台:架构设计与关键挑战
  • Django全栈开发:架构解析与性能优化实战
  • AWS CloudFormation部署双可用区VPC网络架构 - 完整指南
  • Chrome 下载文件时总是提示“已阻止不安全的下载”的解决方案
  • 力扣 hot100 Day32
  • 鸿蒙UI框架深度解析:对比Android/iOS的布局适配与组件设计
  • ElementUI 表格el-table自适应高度随浏览器窗口变化
  • 量子算法:微算法科技用于定位未知哈希图的量子算法,网络安全中的哈希映射突破
  • 在设计提示词(Prompt)时,关于信息位置的安排z怎么 结合模型特性和任务目标
  • 容器基础5-Helm 与 K8s 的关系
  • Lua 安装使用教程
  • 第二章AIGC入门:打开人工智能生成内容的新世界大门(3/36)
  • 不会用PS?,有一键图片处理工具
  • Crossbar结构的排队策略
  • 【深度学习-Day 34】CNN实战:从零构建CIFAR-10图像分类器(PyTorch)
  • Linux下MinIO单节点安装部署
  • 【趣谈】Android多用户导致的UserID、UID、shareUserId、UserHandle术语混乱讨论
  • Ubuntu主机FFmpeg推流+云服务器Django+WebSocket接收+Web显示
  • 【RTSP从零实践】6、实现最简单的同时传输H264、AAC的RTSP服务器
  • nignx+Tomcat+NFS负载均衡加共享储存服务脚本
  • 解决 Cannot create Swift scratch context
  • 【技术前沿:飞算JavaAI如何用AI引擎颠覆传统Java开发模式】
  • 洞若观火 - 运行时安全检测
  • Node.js、npm 与 nvm 使用全指南:安装、版本管理与开发环境配置详解
  • 运用逆元优化组合计算#数论