为什么在软件即服务的框架中我要回归到最基础的技术

可访问
• 阅读 127

引言

“道”在中国哲学中,是一个重要的概念,表示“终极真理”。“道”这一概念,不单为哲学流派诸子百家所重视,也被宗教流派道教等所使用。

大道至简的意思就是大道理是极其简单的,简单到一两句话就能说明白。正所谓“真传一句话,假传万卷书”。

正文

在开启独立创作之路之前,我主要使用.Net 和 Java作为后端开发技术,前端通常使用Vue.js。那么,为什么我要选择一些不太擅长的技术呢?答案:大道至简

所谓独立创作者,指的是仅依靠自己有限的资源,而不依赖外部庞大的资源,来维持作品的开发与运营的从业人员。

作者简介:本人于2006年参加工作, 在信息技术领域摸爬滚打长达20年之久,曾任外资企业首席构架师,互联网大厂的技术专家,在初创公司的技术管理中心任部门经理,现任研发总监,负责公司技术研发规范和项目研发和维护。

精通各种主流开发语言,比如:Java,C#,JavaScript,Python,Go,Rust等,以及常见数据库,比如:MSSQL,MySQL,PostgreSQL,Redis,Presto,Cassandra等。

曾带领导100人+团队自研微服务微前端低代码架构设计,目前主要带领公司研发团队在大数据人工智能方向技术研发。

没有实践,哪来真知?

虽然Java的生态很成熟,各种开源框架以及JDK非常丰富,版本更新也挺快,社区也比较强大。虽然,.Net、Python、NodeJS等,也是争奇斗艳,推陈出新。但是,我觉得:软件最终还是服务于业务实现业务逻辑才是最终目标,各种技术框架只是为了让开发更加简单和高效并不是直接为了实现业务逻辑。

一切都来源于实践!在我构建Byeap.com网站时,我发现作为独立创作者在构建软件即服务时,应该选择回归到最基础的技术上,以安全、高效、代成本的方式解决实际问题。

软件即服务的价值是什么?

软件即服务本质上就是通过”共享“降低生产成本,使更多的用户可以以更低的代价使用更高的技术从而提高自己的效率。即通过成本优化实现技术普惠

  1. 超低的成本

    无论是CPU的性能还是内存的空间都成本。后端我选择Go 语言,因为它具有出色的性能,特别是在并发和网络编程方面。对于软件即服务来说,处理大量并发请求和高效的网络通信是非常重要的。Go 语言的Go Routines(轻量级线程)和内置的并发原语(如 channels)可以极大地简化并发编程,同时保持出色的性能。

    虽然Vue.js等前端框架可以提高开发效率,但它们也可能对性能产生一定的影响。软件即服务的网站对性能要求非常高,我选择传统的HTML+CSS+JS技术完成前端搭建。

    当然,Go语言并不是性能最好的技术,我真心不喜欢GC(垃圾回收器)浪费服务器的内存,奈何对内存的管理是一件相当复杂的事,我也不太可能为了性能放弃快速构建。

    所以我只能退而求其次选择GC,而Go 语言的GC对于服务器端应用来说还是非常友好,至少比Java强很多。它能够在保证内存安全的同时,减少内存泄漏和碎片化的风险。这对于长时间运行Byeap.com网站服务来说十分重要。

    在前端构建中,我也并非不选择架构,在某些页面构建时,我也会选择jQuery、React、Vue.js等技术框架。只是我不会将这些框架应用到所有页面,而只是应用在某些特别需要的页面中。

  2. 快速的响应

    快速要分成两个层面,首先是用户体验方面,作为软件即服务Byeap.com网站,如何用户访问缓慢必然得不到用户的信任;其次是版本迭代,在构建Byeap.com网站时,我的主要思路就是MVP - “Minimum Viable Product”的首字母缩写,即“最小可行性产品”,然后根据用户的使用反馈快速迭代软件版本。

    因此软件即服务需要:

    1、易于部署和扩展:Go 语言编译后的程序是静态链接的,不依赖于外部运行时环境,可以快速部署在数百台服务器上。页面修改可以选择增量更新。

    2、简洁的语法和快速的开发:Go 语言的语法简洁易读,学习曲线相对平缓。同时,由于其编译速度快且运行时开销小,因此开发迭代和测试过程也非常迅速。页面使用HTML+CSS+JS本身没有技术难点,界面调整非常直观和简单,并且可以兼容所有浏览器。这一点对Byeap.com网站非常重要,我不希望我的用户因为没有使用最新浏览器而受到歧视。

    3、性能与速度:数据库的访问我是直接使用原生的SQL执行,通常使用存储过程。尽一切的可能提升系统的性能。HTML+CSS+JS在编写代码时就已经尽可能按需加载,不必要的内容不会出现在页面中。比如:内容页面只有静态的文本对用户有实际意义,我就不会在页面内容中加载jQuery、 Vue.js等框架。

  3. 安全、稳定与易达

    Go 语言在设计和实现时非常注重安全性和稳定性。它提供了许多内置的安全特性,如内存安全、类型安全等。同时,由于其简洁的语法和严格的编译过程,Go 语言程序也更容易避免常见的编程错误和漏洞。

    搜索引擎优化,我需要让尽可能多的人知道和使用我的服务,像Vue.js、React等作为一个前端框架,对于SEO(优化搜索引擎排名)存在影响,这些影响主要源于其SPA(单页应用程序)的特性。

    Byeap.com网站对用户和搜索引擎而言都是非常友好。也许普通非技术用户并不知道对搜索引擎友好意味着什么。国外有个报道,现在互联网的流量中可能超过50%已经不是真实的人,而各种智能人(搜索引擎、ChatGPT们)了。

看似合理的画蛇添足

很多开发人员都存在画蛇添足的行为。比如:

1. ORM(对象关系映射):

使用一些ORM框架,通常会在运行时进行各种封装、抽象和转换,这可能会引入一些额外的开销。

对于需要高性能、低延迟的应用来说,直接使用最原生SQL或存储过程会更高效。

2. SPA(单页应用程序)

有些技术人员开发一个网站,上来就是Vue.js、React或Angular,它们不仅有一定的学习曲线。还有额外的性能开销。

如果你刚开始接触前端框架,可能会觉得它们比传统的HTML、CSS和JavaScript更加复杂。同时,如果你不理解HTML、CSS和JavaScript。你框架使用再多,也未必知道如何解决一些在特殊情况下的性能与安全优化。

直接生成数据,HTML显然是更加灵活和高效。

3. Spring Cloud(微服务)

微服务是一个构架思想,我不是说,不要使用微服务,实际我的网站大量使用了微服务思想。但是,这不是说,我使用了大家熟知,但却一知半解的一些框架,比如:Spring Cloud、Nacos、Consul等,对于需要高性能、低延迟的应用来说,我们应用不能太依赖一个全家桶。这将失去:

1、灵活性:微服务框架通常提供了一套固定的API和模式,这可能会限制开发者的灵活性。

2、稳定性:微服务框架通常有很多组件,一旦系统出问题,定位问题将非常复杂。

总结

实际上,在SaaS(软件即服务)服务面前,用户并不关心你使用了什么技术,用户更多关心的是:超低的成本快速的响应安全稳定与易达

用户在意的是他的浏览器是否可以正常访问我们的网站,在这样的情况下,Vue.js,React的限制往往会忽略掉一些特别的用户访问。

当然,作为技术型决策,需要注意的是,凡事都并不是绝对。在某些情况下,框架可能会带来更高的开发效率和更好的代码质量。只是作为SaaS,没有必要为了解决所谓的开发效率,而引入更多的问题。

我们需要的不是问题,我们需要的是答案。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
3年前
VBox 启动虚拟机失败
在Vbox(5.0.8版本)启动Ubuntu的虚拟机时,遇到错误信息:NtCreateFile(\\Device\\VBoxDrvStub)failed:0xc000000034STATUS\_OBJECT\_NAME\_NOT\_FOUND(0retries) (rc101)Makesurethekern
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Wesley13 Wesley13
3年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable