我造的这个"轮子"指的是集低代码开发与运维为一体的平台,为什么说它不是"圆"的,因为它有些与众不同,甚至可以说是有些另类。至于为什么造这个"轮子",以及另类在什么地方且听我慢慢道来。

一、痛苦的编码岁月

  我是一个70后码农,开发过不计其数的系统,小到进销存大到电商、物联网甚至是省级平台。每次项目开始都要经历从技术选型、架构设计、开发、测试及最终生产环境部署运维等多个步骤。小项目还好随便一个单体架构就可以搞定,大项目特别是数据量较大的不仔细设计并考虑性能与扩展,随随便便就能把系统玩死。日复一日年复一年的编码,还得时时担心系统crash真是让我身心疲惫。

二、静下心来的思考

  为什么?为什么码农就需要这么累?为什么会没有银弹,哪怕是近似的东东?我又到底需要什么?

天下武功唯快不破

  • 我需要的是能够快速的从无到有的开发出一套系统的工具,并且能够快速部署。

简单的才是最美的

  • 我需要的是适用于中小规模的简单架构,并且依赖的技术越少越好。

唯一不变的是变化

  • 我需要的是能够随时适应需求变化,并且能够按需扩展的分布式架构。

一切尽在掌握

  • 我需要的是能够轻松掌握的系统状态,并且能尽早发现问题及时告警。

三、苦苦的寻找

  经历过痛苦与思考,才知道自己想要的是什么,因而我开始了漫长的寻找与学习过程。先是了解各类开发语言(包括可能您都没有听过的Vala),熟悉其优势、弱势及适用场景。然后学习各种类库及框架,只要觉得能加速开发过程便会研究一番并尝试应用于项目中。最后开始接触各类零代码低代码开发平台,包括国外的OutSystems,国内的起点等。但这些开发平台有些授权费用高,有些有各种各样的限制只能适用于特定场景,且大都是单体架构无法扩展,性能一般般对硬件的要求又高。总之没有我认为完美的技术或组合是我所需要的,难道真的应了“没有银弹”,只能继续疲惫下去。可我偏偏是个比较偏执的人,没有咱就来造一个,哪怕是只提高10%的效率减少10%的成本那就有意义。

四、撸起袖子直接干

  一开始我只是想参照一些快速开发平台实现类似的功能,并且遵循“物得其所”的原则支持不同的存储技术(Sql, NoSql, 对象存储)。在此基础上我实现了一个版本(代号AppBox),但在实现过程中为了适配各类存储技术及相应的api我烦不胜烦,另外这么多技术叠加在一起对整个架构的部署与运维造成了不小的麻烦,总是觉得不完美太Low。

  既然选择了造轮子,何不造个大一点的。所以我又开始动起了存储的念头,在学习了NewSql与NoSql技术后,我决定基于Raft与RocksDB直接实现分布式的存储集成在框架内,这样的话关系型数据、半结构化数据、非结构化数据的存储一并搞定。简单!完美!

五、未来在招手

  “路漫漫其修远兮,吾将上下而求索”,目前原型总算是有点模样了,虽打开代码满屏的TODO,但我抱着愚公移山的态度,相信只要每天码一点,总有一天码出一个近似完美的“巨轮”,也借此寻求志同道合者来共同完成这个“轮子”,共同实现Enjoy coding! Enjoy life!

我造了个好大的"轮子",居然还不是"圆"的!的更多相关文章

  1. 学一手,知乎大V(轮子哥)当年靠它进微软亚洲研究院

    前言 vczh本名陈梓瀚,不过大家更愿意叫他「轮子哥」,毕业于华南理工大学软件学院.vczh大学时代就在微软实习,毕业后即加入微软.开始时是在微软上海,后来进入北京的微软亚洲研究院.现已移居美国西雅图 ...

  2. SQLite is 35% Faster Than The Filesystem

    比方说你要在C++/PHP里实现一个函数Image get_image(string id),不同的图片有1万张(用户头像),你可以把它们存在一个目录/文件夹里,然后fopen()再fread. 你也 ...

  3. NOIP2016滚粗记

    想了好久还是决定要写... Day0 Day-5得感冒一直没好,连磕5天药丸. 早晨得知爸妈都要上班并不能送我到校的消息,于是计划10:30集合,定表8:45准备自己走去学校. 然后平常睡得有点晚,结 ...

  4. 用Go造轮子-管理集群中的配置文件

    写在前面 最近一年来,我都在做公司的RTB广告系统,包括SSP曝光服务,ADX服务和DSP系统.因为是第一次在公司用Go语言实现这么一个大的系统,中间因为各种原因造了很多轮子.现在稍微有点时间,觉着有 ...

  5. 为什么Java大数据是最火爆的编程语言?

    未来10年将是大数据,人工智能爆发的时代,到时将会有大量的企业需要借助大数据,而Java最大的优势就是它在大数据领域的地位,目前很多的大数据架构都是通过Java来完成的. 在这个Android.iOS ...

  6. 大神为你分析 Go、Java、C 等主流编程语言(Go可以替代Java,而且最小化程序员的工作量,学习比较容易)

    本文主要分析 C.C++98.C++11.Java 与 Go,主要论述语言的关键能力.在论述的过程中会结合华为各语言编程专家和华为电信软件内部的骨干开发人员的交流,摒弃语言偏好或者语言教派之争,尽量以 ...

  7. 使用rowid抽取数据方法以及大数据量游标卡住的应对

    平时工作的时候,经常会遇到这种事情,从一个大表A中,抽取字段a在一个相对较小B的表的数据,比如,从一个详单表中,抽取几万个用户号码的话单出来.这种时候,一般来说, 做关联查询: create tabl ...

  8. Visual Studio+TFS--强大的项目管理工具

    一.前言 微软的Visual Studio非常强大,可以无缝结合Git或自家的TFS(Team Foundation Server),进行项目管理非常方便,从需求分析.开发.测试.维护,几乎可以贯穿软 ...

  9. NanoProfiler - 适合生产环境的性能监控类库 之 大数据篇

    上期回顾 上一期:NanoProfiler - 适合生产环境的性能监控类库 之 基本功能篇 上次介绍了NanoProfiler的基本功能,提到,NanoProfiler实现了MiniProfiler欠 ...

随机推荐

  1. ABP之Setting

    介绍 每个应用程序都需要存储一些设置,并在应用程序的某个地方使用这些设置.ABP提供了一个强大的基础设施来存储/检索在服务器端和客户端都可用的应用程序.租户和用户级别设置. 设置是通常存储在数据库(或 ...

  2. Angular4.0从入门到实战打造在线竞拍网站学习笔记之一--组件

    Angular4.0基础知识之组件 Angular4.0基础知识之路由 Angular4.0依赖注入 Angular4.0数据绑定&管道 最近搞到手了一部Angular4的视频教程,这几天正好 ...

  3. 继承Comparable接口来实现排序

    1.java代码里进行排序(若sql能排序,就不要用代码排序) 可以继承Comparable接口来实现,若是在类中,可以声明Comparator对象,来进行比较 List<Map> map ...

  4. HashMap原理(一) 概念和底层架构

    HashMap在Java开发中使用的非常频繁,可以说仅次于String,可以和ArrayList并驾齐驱,准备用几个章节来梳理一下HashMap.我们还是从定义一个HashMap开始. HashMap ...

  5. 【Linux】一步一步学Linux——VMware虚拟机三种网络模式详解(07)

    目录 00. 目录 01. 虚拟网络连接组件 02. 常见网络连接配置 03. 桥接模式 04. NAT 模式 05. 仅主机模式 06. 自定义模式 07. 附录 00. 目录 @ 01. 虚拟网络 ...

  6. HashMap原理(二) 扩容机制及存取原理

    我们在上一个章节<HashMap原理(一) 概念和底层架构>中讲解了HashMap的存储数据结构以及常用的概念及变量,包括capacity容量,threshold变量和loadFactor ...

  7. 每天学点node系列-http

    任何可以使用JavaScript来编写的应用,最终会由JavaScript编写.--Atwood's Law http模块概览 http模块主要用于创建http server服务,并且 支持更多特性 ...

  8. 浅入深出Vue:子组件与数据传递

    上一篇了解了组件的概念及在使用中需要注意的地方.在面对单个组件逻辑复杂需要拆分时,难免会遇到父子组件之间数据传递的问题.那么我们来了解一下在父子组件之间进行数据传递时需要遵循哪些约定,以及要注意哪些问 ...

  9. C++中 / 和 % 在分离各位时的妙用

    在学习c++的过程中,我们一般用 / 和 % 来分解数字的各个位 取整 (/) 比如1234 / 10 等于 123.4,这相当于把前三位分解出来了 取余(%) 比如 12345 的分解方法 个位:1 ...

  10. 每日一问:Android 滑动冲突,你们都是怎样处理的

    坚持原创日更,短平快的 Android 进阶系列,敬请直接在微信公众号搜索:nanchen,直接关注并设为星标,精彩不容错过. 在 Android 开发中,滑动冲突总是我们一个无法避免的话题.而对于解 ...