我造了个好大的"轮子",居然还不是"圆"的!
我造的这个"轮子"指的是集低代码开发与运维为一体的平台,为什么说它不是"圆"的,因为它有些与众不同,甚至可以说是有些另类。至于为什么造这个"轮子",以及另类在什么地方且听我慢慢道来。
一、痛苦的编码岁月
我是一个70后码农,开发过不计其数的系统,小到进销存大到电商、物联网甚至是省级平台。每次项目开始都要经历从技术选型、架构设计、开发、测试及最终生产环境部署运维等多个步骤。小项目还好随便一个单体架构就可以搞定,大项目特别是数据量较大的不仔细设计并考虑性能与扩展,随随便便就能把系统玩死。日复一日年复一年的编码,还得时时担心系统crash真是让我身心疲惫。
二、静下心来的思考
为什么?为什么码农就需要这么累?为什么会没有银弹,哪怕是近似的东东?我又到底需要什么?
天下武功唯快不破
- 我需要的是能够快速的从无到有的开发出一套系统的工具,并且能够快速部署。
简单的才是最美的
- 我需要的是适用于中小规模的简单架构,并且依赖的技术越少越好。
唯一不变的是变化
- 我需要的是能够随时适应需求变化,并且能够按需扩展的分布式架构。
一切尽在掌握
- 我需要的是能够轻松掌握的系统状态,并且能尽早发现问题及时告警。
三、苦苦的寻找
经历过痛苦与思考,才知道自己想要的是什么,因而我开始了漫长的寻找与学习过程。先是了解各类开发语言(包括可能您都没有听过的Vala),熟悉其优势、弱势及适用场景。然后学习各种类库及框架,只要觉得能加速开发过程便会研究一番并尝试应用于项目中。最后开始接触各类零代码低代码开发平台,包括国外的OutSystems,国内的起点等。但这些开发平台有些授权费用高,有些有各种各样的限制只能适用于特定场景,且大都是单体架构无法扩展,性能一般般对硬件的要求又高。总之没有我认为完美的技术或组合是我所需要的,难道真的应了“没有银弹”,只能继续疲惫下去。可我偏偏是个比较偏执的人,没有咱就来造一个,哪怕是只提高10%的效率减少10%的成本那就有意义。
四、撸起袖子直接干
一开始我只是想参照一些快速开发平台实现类似的功能,并且遵循“物得其所”的原则支持不同的存储技术(Sql, NoSql, 对象存储)。在此基础上我实现了一个版本(代号AppBox),但在实现过程中为了适配各类存储技术及相应的api我烦不胜烦,另外这么多技术叠加在一起对整个架构的部署与运维造成了不小的麻烦,总是觉得不完美太Low。
既然选择了造轮子,何不造个大一点的。所以我又开始动起了存储的念头,在学习了NewSql与NoSql技术后,我决定基于Raft与RocksDB直接实现分布式的存储集成在框架内,这样的话关系型数据、半结构化数据、非结构化数据的存储一并搞定。简单!完美!
五、未来在招手
“路漫漫其修远兮,吾将上下而求索”,目前原型总算是有点模样了,虽打开代码满屏的TODO,但我抱着愚公移山的态度,相信只要每天码一点,总有一天码出一个近似完美的“巨轮”,也借此寻求志同道合者来共同完成这个“轮子”,共同实现Enjoy coding! Enjoy life!
我造了个好大的"轮子",居然还不是"圆"的!的更多相关文章
- 学一手,知乎大V(轮子哥)当年靠它进微软亚洲研究院
前言 vczh本名陈梓瀚,不过大家更愿意叫他「轮子哥」,毕业于华南理工大学软件学院.vczh大学时代就在微软实习,毕业后即加入微软.开始时是在微软上海,后来进入北京的微软亚洲研究院.现已移居美国西雅图 ...
- SQLite is 35% Faster Than The Filesystem
比方说你要在C++/PHP里实现一个函数Image get_image(string id),不同的图片有1万张(用户头像),你可以把它们存在一个目录/文件夹里,然后fopen()再fread. 你也 ...
- NOIP2016滚粗记
想了好久还是决定要写... Day0 Day-5得感冒一直没好,连磕5天药丸. 早晨得知爸妈都要上班并不能送我到校的消息,于是计划10:30集合,定表8:45准备自己走去学校. 然后平常睡得有点晚,结 ...
- 用Go造轮子-管理集群中的配置文件
写在前面 最近一年来,我都在做公司的RTB广告系统,包括SSP曝光服务,ADX服务和DSP系统.因为是第一次在公司用Go语言实现这么一个大的系统,中间因为各种原因造了很多轮子.现在稍微有点时间,觉着有 ...
- 为什么Java大数据是最火爆的编程语言?
未来10年将是大数据,人工智能爆发的时代,到时将会有大量的企业需要借助大数据,而Java最大的优势就是它在大数据领域的地位,目前很多的大数据架构都是通过Java来完成的. 在这个Android.iOS ...
- 大神为你分析 Go、Java、C 等主流编程语言(Go可以替代Java,而且最小化程序员的工作量,学习比较容易)
本文主要分析 C.C++98.C++11.Java 与 Go,主要论述语言的关键能力.在论述的过程中会结合华为各语言编程专家和华为电信软件内部的骨干开发人员的交流,摒弃语言偏好或者语言教派之争,尽量以 ...
- 使用rowid抽取数据方法以及大数据量游标卡住的应对
平时工作的时候,经常会遇到这种事情,从一个大表A中,抽取字段a在一个相对较小B的表的数据,比如,从一个详单表中,抽取几万个用户号码的话单出来.这种时候,一般来说, 做关联查询: create tabl ...
- Visual Studio+TFS--强大的项目管理工具
一.前言 微软的Visual Studio非常强大,可以无缝结合Git或自家的TFS(Team Foundation Server),进行项目管理非常方便,从需求分析.开发.测试.维护,几乎可以贯穿软 ...
- NanoProfiler - 适合生产环境的性能监控类库 之 大数据篇
上期回顾 上一期:NanoProfiler - 适合生产环境的性能监控类库 之 基本功能篇 上次介绍了NanoProfiler的基本功能,提到,NanoProfiler实现了MiniProfiler欠 ...
随机推荐
- delphi7 xml通用解析转换为stringgrid
对于有n多记录的xml,可以填充到stringgrid中 其中 vkeynode 为 xml中 重复节点 function CommonAnalyzeXml(vxml,vkeynode: string ...
- 分页组件与CBV
一. 自定义分页 1.准备工作 (1).首先在models.py中创建一张book表用来存储数据 from django.db import models class Book(models.Mode ...
- 分享Nginx在Windows下的管理命令(bat文件)
话不多说,复制下面的内容,存成bat文件,放到nginx目录下. ====================================================@echo offrem 当前 ...
- Spring Cloud Gateway使用
简介 Spring Cloud Gateway是Spring Cloud官方推出的网关框架,网关作为流量入口,在微服务系统中有着十分重要的作用,常用功能包括:鉴权.路由转发.熔断.限流等. Sprin ...
- vagramt中同步文件,webpack不热加载
这是一篇参考文章:https://webpack.js.org/guides/development-vagrant/ 在使用vue-cli+webpack构建的项目中,如何使用vagrant文件同步 ...
- Java进阶——高性能MySQL(一)
MySQL逻辑架构: 链接管理与安全性: MySQL5.5或更高版本版本提供了一个API,支持线程池(Thread-Pooling)插件,可以使用池中的少量线程来服务大量的连接. 优化与并行: MyS ...
- mysql 正确清理binlog日志的两种方法
前言: MySQL中的binlog日志记录了数据库中数据的变动,便于对数据的基于时间点和基于位置的恢复,但是binlog也会日渐增大,占用很大的磁盘空间,因此,要对binlog使用正确安全的方法清理掉 ...
- .NET Core IdentityServer4实战 第六章-Consent授权页
在identityServer4中登陆页面只要是成功了,就会注册一个Cookie在服务器资源上,像现在大部分的网站第三方授权,都是经过一个页面,然后选需要的功能,IdentityServer4也给我们 ...
- 浅谈Linq查询
一.Var关键字 在学习Linq查询之前,我们先来学习var关键字的用法,看看微软官方的定义:从Visual C#3.0开始,在方法范围声明的变量可以具有隐式“类型” var.隐式类型的局部变量是强类 ...
- ZooKeeper入门(一)
1 基本概念 1.1 什么是ZooKeeper zookeeper是为分布式应用所设计的高可用.高性能且一致的开源协调服务 1.2 Zookeeper的特点 顺序一致性 原子性 单一视图 可靠性 实时 ...