用我十多年的“奇葩”经验,给在“挂吊瓶”的博客园几点建议

初识博客园

我是08年开始接触开发的,一开始涉及的就是.net和java,记得那会好像是jar6来着,net嘛还是2.0
那时候包括现在,找资料很多时候会找到博客园来
一开始我以为博客园是很多博主成立的一个联盟,就是各自弄一个博客系统,然后公用一个域名
为啥会这么想呢?
因为我看高的博文都长得不一样啊!一般的一个博主就一套风格!!!
现在想想,我觉得这个差异化没必要存在,你搞些挂件即可,样式风格都变了,就变成杂了,对于品牌度来说没有好处!
国内目前能找技术的,博客园,csdn,掘金,知乎,还有其他啥?感觉在技术论坛这一块国内是真的少的!
当你在找资料的时候,如果找到博客园,那么答案大概在6成了,
如果找到CSDN,我感觉这个在3成!特别是CSDN那个资源下载,啥玩意都是乱套的!
其他一些没听过的,1成都没有,都是乱转载的,内容不全不说,排版还各种问题!简直就是一种折磨!

致敬为技术

很多人说这几年过来,博客园保留了对技术的执着
要我说,毛线的执着,就是懒
不知道是真的懒,还是对屎山代码的望而怯步
最近几个月,各种求助帖子,各种要抢救一下
我看很多人都提出了自己的建议,很多建议我觉得还是很中肯的
结果???
啥都没看到,至少我没看到博客园的改变!
所以毁灭吧,别为懒找借口!!!
我说懒,你还不信?你觉得是技术太难?

应用开发也就那回事

我从大概09年开始做项目,最先接触的是wince,估计很多人都不知道那玩意
那玩意我记得是用.net1.多的版本,后面才升级的2.0
最早接触的mobile页面哪有现在的那么牛叉的性能
那会的网络还是2g,所以你懂的,需要做到页面快速能打开,需要做多少的性能节约!
从webform入门后,先后接触开发过
winform(CD),对你没看错不是CS是CD,啥意思,就是直连数据库,后面才搞了一个S!
winform是用于开发管理端嘛,
那客户端就搞了那个wpf,还是net3.5的货色,wpf是个好东西啊,可惜推出的时间太早了
为了配合WPF,还独立开发对应的APP
Android(2.1),我记得是这个版本,那会4.0才刚推出,那会安卓还是刚热门,那个摩托罗拉的墓碑手机有人记得不
IOS(6),不太记得是5还是6了,反正那会7还没出,为啥?因为7那会才开始走扁平风格的
WP(8.1),这个估计现在的小年轻都不知道是啥玩意,没错微软曾经是出过几代手机系统的!
对你没看错,上面的都是独立开发的,而且都是用原生开发的,自己边学边倒腾!
上面的应用你要觉得简单,那就想错了,涉及的主要是socket,就是聊天,支持图文等那种
然后是把他们弄成一整套系统!
遇到的比较多的问题就是聊天区域的技术问题,那会找资料,偏门点的都得找洋文去
全部整完,给我得感觉就是剑在手,天下走!只要是应用开发,其实技术也就那样,没有多少东西是难得!
那开发就没难得事了么?
那还是有的,只是领域不一样而已,比如最近老火得AI模型,一些驱动开发
像游戏引擎,我就感觉很神奇得,不过这些走在前沿的和我们的关系不大,我们是使用者,就是个小普通!

所以博客园在干嘛?

我查了下博客园是04年成立的,到现在!!! 20年!!!
所以这20年,博客园成长了啥?
是不敢迈出去,还是之前还有钱赚,被糖衣炮弹给甜住了,现在到存亡了出来后悔了?
世上从没后悔药哈!

迈出第一步,节能减排

我是如何节俭的?以下说几个我经历过的事情

审视服务器的工具占用的资源

大家很容易忽略的一个元素,就是服务器上的工具,我见过一台服务器16GB内存的,结果业务的资源才占用400MB,其他的你以为就空了?
不不不
全部被所谓的工具吃了,什么gitlab,k8s,jenkins,apollo等等

场景一:
甲:你这个代码这样写,会内存泄漏的的
乙:不会吧,我从网上看到的啊,他们都是这么用的!
甲:... .. .
场景二:
甲:额,这个key存入redis咋没配置过期时间啊,那不是不会命中数据库了
乙:不知道,我接手前就是这样的,一直用得好好的
甲:我看数据库是有这个对象的,只是代码没读取,那不是一直使用redis了
乙:别改它,就这样,能用就行
------ 一段时间后,由于服务器内存吃紧,运行把redis的数据清空了 ------
乙:这个服务咋启动不了, 没改东西啊,咋回事...
场景三
甲:这个接口返回咋这么慢,还这么大,没多少数据啊,就一个表,10条数据都不到
甲:额,为啥图片也在里面,不是都存储一个url么?
乙:因为还有一台服务器也要用,为了方便就把图片存数据库了
甲:... .. .
场景四
甲:一天访问的PU不到100,则服务器内存满了(16GB的服务器)?
乙:我看看... .. .
乙:好了,我重启了部分服务
甲:这些进程是干嘛用得?k8s,jenkins,apollo,gitlab ... .. .
乙:部署服务用的,这个是部署管理容器的,这个是构建代码的,这个是配置中心 ... .. .
甲:额,有必要这搞么,代码服务才一点点!
乙:微服务嘛,都是这样部署的
甲:... .. .
场景五
甲:这个服务是不是有问题啊,内存泄漏了
乙:你咋知道?一直都运行的好好的
甲:我观察的,我都观察他2天了,内存就没减少过
乙:我看看... .. .
乙:没有啊,才占用400MB
甲:你升级了?我昨天看的时候已经800MB了
甲:被docker的规则,重启了,你看,这都重启12次了
乙:这不可以正常访问嘛,不管他
甲:... .. .

我记得上一次我提建议说过图片大小的问题,博客园默认上传时png的,我用默认转化成webp,图片从原来的77KB压缩到22KB!
结果来了一句啥?
图片的资源流量费用只占了10%
真是没当过家,柴米油盐酱醋茶,这里一块,那里一块,最后一算,你会发觉数目可不小!

你看看我的【贴代码】服务器时啥配置
就是阿里云的99/年的,2GB内存的那个轻应用服务器!
看看我这个2GB的服务器都运行了啥!

ps aux|head -1;ps aux|sort -rn -k +4|head
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      774800  0.2 10.0 2633064 194916 pts/0  Ssl+ Aug16  40:08 dotnet PasteSpider.HttpApi.Host.dll
root     1742666  0.0  8.6 2622480 166376 ?      Ssl  Aug26   1:57 dotnet PasteSoft.HttpApi.Host.dll
root     1347915  0.6  8.1 281684 156796 ?       Ssl  Jul09 436:53 /usr/local/aegis/aegis_client/aegis_12_13/AliYunDunMonitor
systemd+    2371  0.2  7.6 2251832 147600 pts/0  Sl+  Jul03 202:58 /opt/erlang/lib/erlang/
systemd+    2226  0.0  4.8 360052 92776 ?        Ss   Jul03   0:49 postgres: checkpointer 
root        2645  0.0  4.6 3585060 89308 ?       Ssl  Jul03  33:52 dotnet PasteTick.HttpApi.Host.dll
root         748  0.2  1.4 856520 28372 ?        Sl   Jul03 174:35 CmsGoAgent-Worker start
root         646  0.0  1.2 1321432 24868 ?       Ssl  Jul03   1:59 /usr/libexec/snapd/snapd
systemd+    2196  0.0  1.1 359916 21808 pts/0    Ss+  Jul03   3:34 postgres
root         903  0.1  0.8 474984 15556 ?        Ssl  Jul03 133:08 /usr/libexec/platform-python -Es /usr/sbin/tuned -l -P

你信不信我在这个服务器上还能使用CI/CD模式来部署我的服务!
CI/CD是啥?叫持续部署!在我理解就是你提交了代码,工具帮你把最新代码部署到服务器上!
实现这个的不是有个很流行的么,叫Jenkins!不过我这个2GB的服务器是不够Jenkins折腾的!

如果要给三方的工具评个分,那么nginx,redis,rabbitmq等我绝对会打优秀,至于其他的嘛,看情况,特别是在这几年节能减排的环境下,打分会更低!

思考服务代码本身

最近几年我比较喜欢的框架就是ABPvNext的,不过用的不是他原生的,时他的精简版,我叫他PasteTemplate,对一个项目模板!这样我每次创建新的项目就可以快速创建了!
为啥要精简呢?
原来的模块很多我都用不到,太臃肿了,启动都是慢半拍的,精简后感觉飞一样!
而且越简单的东西越不容易出错!
模块化嘛,后面需要啥再加回去!
别觉得这里省一点,哪里省一点不足挂齿!特别是WebApi,由于有访问量的特性,这个节省其实就能被放大的!
比如你能够在运行的时候节省1KB,那么在同样的资源下,你能接受的并发会更大,甚至能到倍数的差距!

不痛不痒的板块

所以呢,像博客园的很多模块我感觉直接就砍掉得了!
比如闪存?这个是啥玩意?初衷是什么?
你说他是一个聊天的吧,基本的聊天界面都不像!
你说他不是聊天的吧,他能实时更新
或许设计这个板块的时候的初衷不是这样的,后面走偏了
居然违背了初衷,那,要么修正他,要么就抛弃他!
其他板块有没有这样的问题呢?

回复相关

还有那个评论的时候显示多少毫秒的,那个干啥呢?
你说炫耀技术吊炸天吧,我感觉也没有牛叉的,都几百毫秒了
你说监听是否出状态吧,你后台埋一个代码,超出多少发你自己手机上,来一个通知即可,所以发出来干嘛?
你不知道么?回复后,内容是做到了上屏,但是样式不一样啊!!!

UI相关

其他模块,看过几个页面,给我感觉就是各个阶段开发的,为啥?因为各个页面的风格都不一样
看了下代码量也不多啊,很多就是样式的问题,如果说对技术这么执着,那么为啥这个天天看的东西都没空改改呢???

现在都啥年代了,00后的都本25去了啊,你看看90后,00后的审美
你觉得你这个04年的时代风格的东西,他们能接受么?

千万别说他们不是你得客户对象
来如风雨,去似微尘。长江后浪推前浪,世上新人赶旧人
当初你的目标客户,终会随着岁月离你而去的
不是有一句话么,公司里面的有房贷车贷的,做错事了,你就可以直接开骂,他都不带还手的!
可你知道他们当初也是初生牛犊不怕虎的!

所以你得跟随时代,改变从看得见的UI开始,绝对错不了!

迈出第二步,保持初心

一眼看,满目都是不平,那有没有优势的地方呢?
至少我目前找资料的话,进入到博客园的话,我心里是😊的
如果是进入隔壁的,那心情就复杂了,如果是那个下载资源的,哎,果断返回
如果是其他的,特别是那些小网站的,我都恨不得能记住浏览器返回键的快捷键是哪个!

我也是非常不赞同CSDN那种啥都是钱的玩法,实际开发过项目的,你会发觉那些所谓的付费的东西,呵呵,连门都没入!
开发中,你会遇到千奇百怪的需求,各种莫名其妙的问题,最终你都会找到答案,都会寻到问题的出处,而这些,那些所谓的实战时不会遇到的!
打个比方
在我以前的一个在线客服系统中,给甲配置的接待比例为50%,给乙的也是50%
结果第二天,甲跑过来说,你这个系统不行啊!
我都接收了4个访客了,他一个都还没接收到!!!

所以在技术资料这个层面,博客园还是有很大优势的!
如何放大这个优势?

1.快捷搜索

在博文的地方,或者是必要的地方,放一个输入搜索框,如果你能获取到关键字那最好,直接输入,然后让用户可以点击,比如
PasteSpider是什么 site:cnblogs.com
注意看后面的site:cnblogs.com是啥,干嘛用的?
就是告诉搜索引擎,我只搜索这个网站的来源,你就说这个功能实用不实用吧!
要实现这个,所以你就得把那些个性化UI的博文全部给收编掉
啥?不能收?
你都活不下去了,管那么多干嘛啊!

2.相关推荐

不知道你们发现没有,你从首页进入某一个博文
你会发现博文里面的相关链接,就是链接到其他博文的a标签,和首页是一样的!!!
居然是一样的!!!
如果是一样的,你怎么建立你自己的SEO库链接?
所以整改下
思路就是提取当前博文的关键字,然后在页面的推荐板块,基于这个关键字推荐其他的!
这样让博客园的链路像蜘蛛网一样发散关联出去!

3.博文评分

要实现2的功能的效果,你就得引入另外一个机制,评分机制,推荐的时候是基于关键字,然后二级排序就是评分了
评分说简单点都知道怎么做,但是如何才能做得更好呢?
a.要有一个统一的评分机制
1.文章概述是否合理,就是简介标题和内容是否相符
2.整体文章表述的东西是否说清楚了,就是阅读起来是否顺畅
3.目的是否得到,是否解决了问题
4.有没有点出原理,答案往往是次要的,能够知道问题的结症所在才是重要的
5.相关资料是否有提供出处,这样让别人可以继续研究,或者查看其他的方案
6.如果有上下文,是否链接了,其实就是是否兼顾了新手的感受
7.整体布局,图片等信息是否提供,有充分的佐证等
然后在基于这些要点,进行评分,这样每个人的评分大概就差不多了,能够筛选出质量更加优秀的博文!
甚至后续,你可以基于这个来纠正博文的关键字!
b.要有一个激励机制
包括不仅限于页面的引导,比如感谢作者的分享,点击鼠标给个支持!
每个月可以搞几个幸运用户,直接赠送话费啥的,不要怕这个支出,这个重在一个惊喜,然后再公告下!
c.激励更好的成绩
有好成绩的博文,给与更多的曝光,更多的推荐,让好的博文传播给更好的人查看!
我看了最近的那个啥阅读排行版,很多都是和技术无关的东西,如果是我,我希望看到的是每个文章都能有点收货
可是你去看看随便几期的排行,我还不如不看呢!
沙子里面淘金子也没这么累!

4.阅读笔记

新推出一个板块,或者说一个功能!
这个功能是干嘛的呢?
受限他的创建端必须是fixed,就是你们说的poup那个层!
为啥是这个呢?
一篇文章要点有多少?
对于新人来说可能全身是宝,对于老鸟来说,一篇博文,关键点往往只有那么一两处,我总不能为了这一句话收藏这篇博文吧
这也收藏,那也收藏,最后你会发觉,你的收藏夹比首页的博文列表还多,那和没收藏有啥区别?
那就改一改!
直接页面点击笔记,或者直接鼠标选定某些,弹出收藏比较,一篇博文中,可以收藏多个小段,然后自己可以做一个备注
你以为这就搞完了?
不!
还得整一个板块,或者小块,干嘛?
浏览笔记列表用的,还可以对别人的笔记做评价
最终形成一种啥状态?
就是我浏览的都是重点!

还有其他的一些建议,这里不适合说哈!

迈出第三步,合作共赢

博客园给我的感觉,除了博客园就没其他了!
太不应该了!
你得多条腿走路
自己技术不行的话咋办?
合作啊!
有博客园做背书,那怕是和那些外包公司的软件对比也是有优势的,关键点就是你不肯吃亏,总觉得别人和你合作都是占你便宜!

比如,商城系统,在线客服系统,我的PasteSpider部署工具
虽然大家都是开发,但是不是所有人都能开发这些工具的
有时候只是使用一下,自己开发不划算,有现成的,又不贵,谁不选择呢?
你看看,相比于其他人,你免了推广的烦恼!

最不该做的就是外包!
一个项目,做开发的都知道,完全就是个无底洞,你要做得好,你可以一直深耕的,这没个标准的,要是客户不好说话的,你脱身都脱不了!
我以前就遇到过一个,打个比方就是给小车开发的模块,他要拿到大卡车上用,你说这个找谁说理去?
还没体会?你给windows写了一个软件,别人买了,后面他换电脑了mac系统,他说都是软件为啥mac上不能用,你这个开发不行啊!

你看那个赞助商的
是我我才不赞助
赞助了,就换来一个博文里面的介绍!
要是我是博客园,怎么也得给他一个广告位,常年显示得那种
那样别人一看,不错赞助下,还能给自己打广告!
有动力了,这不赞助就来了嘛!

!!!迈出第一步是博客园自救的第一要做的事!!!

写了这么多,请允许我推荐几个项目,都是我自己独立开发的,而且我自己一直在用的项目,都是开源的,如果有意向的也可以私聊我进行进一步的合作!

PasteSpider(开发者专用部署工具)

强烈推荐这个工具,这是一个安装于linux上的,使用docker/podman来部署和维护你的容器服务的工具,目前的规划是
基础版本开源,不过好久没更新了,感觉更多的作用就是让大家知道这个工具是如何实现的
专业版内部开源,对于安全来说,开源我个人觉得不是最好的一个选择,那为啥又有内部开源呢?
主要是针对企业用户而言,就是让你看看里面代码到底有没有猫腻,能否好好用!

主要功能

PasteSpider主要解决了啥问题?我觉得有几个是比较突出的
1.节省资源,你看我上面的服务器的介绍,我就一个2GB的服务器,实现了CI/CD,还部署了贴代码和相关的工具,为了节省资源我连Mysql都不安装
2.非侵入式,快速上手,和其他工具不同,简单点你得服务运行后,你可以把PasteSpider关闭,删除它,也不会影响你的业务服务的运行
3.需要用的功能都有,开发者我们经常要反复执行上线测试,所以我的推荐是在开发机器上编译发布到文件夹,然后使用PasteSpiderFile进行一键发布,这样比CI/CD部署快多了,几秒中就可以发布成功!!!
平滑升级,这个必须要有,通过nginx的切换模式,可以实现无感知升级,这个需要你得应用必须有2个以上容器在运行
路由同步,基于nginx的实现,比如你之前这个项目只有2个容器在运行的,现在升级到运行5个容器了,那么nginx要不要升级?现在你可以释放双手了,因为这个工作PasteSpider也干了
项目概念,如果要给项目定一个概念,在PasteSpider中你可以这么认为,一个一个域名访问的所有服务,属于一个项目!也就是使用访问的域名来划分是不是一个项目
项目网关,服务器或者容器重启后,IP是可能变更的,所以为了解决这个问题PasteSpider引入了项目网关的概念,就是项目内公用一个IP段,这个IP重启服务器是不会变更的!
环境概念,简单理解,就是开发环境,工程模式等,结合账号,还可以实现权限划分等,配合key-val你可以为不同的服务使用不同的配置,这不配置中心就来了!
报表数据,PasteSpider在运行的时候会读取服务器的容器运行状态(你也可以在配置上关闭它),通过查看容器的运行报表,可以很好的知道是否有内存泄漏等!
服务监听,可以基于内存或者CPU的使用,执行扩容还webhook通知,让你在第一时间了解服务器的状态以便做出反馈,减少损失!

WebHook案例

-- ---任务[通知]报告--- -- -
任务名称:构建镜像
服  务  器:1 个人服务器
所在项目:1 贴代码
目标服务:1 贴代码-API
操作环境:0 未知环境
执行结果: -- success --
任务耗时:4s
任务时间:2024-08-26 16:24:19

-- ---任务[通知]报告--- -- -

任务名称:升级
服  务  器:1 个人服务器
所在项目:1 贴代码
目标服务:1 贴代码-API
操作环境:1 默认环境
执行结果: -- success --
任务耗时:16s
任务时间:2024-08-26 16:24:24

PasteSpiderFile

这个是PasteSpider配套工具,windows上使用的客户端,主要作用于项目的差量更新,一键发布!
你想啊,项目编译后,点击一下就能升级,多么舒服的事情!

PasteSoft(个人网站)

之前有考虑爬数据搞一个论坛,类似博客园的,后面被我否定了,因为没啥意义!
为啥又搞了一个类似的呢!
我就想搞一个可以自己的论坛,【贴代码】系列,想怎么改就怎么改!
主要的作用是用于介绍我的贴代码序列的软件的说明,问题,更新,操作文档等!
https://soft.pastecode.cn/Home/Index

PasteTemplate(WebApi项目模板)

说到PasteTemplate就不得不说下PasteBuilder(右键代码生成器)
PasteTemplate是来自ABPvNext项目的精简版,精简版就是把没必要的组件都删除了,所以整个项目是非常干净的!
我的项目几乎是基于PasteTemplate项目模板而创建的!
!!!PasteTemplate最近会升级一个新版本,添加对PasteForm的支持
PasteForm是啥呢?一套结合前后端的CRUD,我愿称他才是CRUD!
为啥他才是CRUD呢?
普通的项目,用这个来实现,管理端才4个页面
1.登陆页面,其实这个页面都不一定要有
2.菜单列表,这里说的是IFrame框架模式的管理端
3.数据列表,就是我们常看到的用表格显示查询的数据
4.表单页面,这个页面实现了对表单的新增和编辑
你一定会说,想啥呢,一个项目100个表,你也才4个页面?那页面肯定很大吧!
不,页面都不大,去除jquery.js,date.js,api.js的,页面的代码才几百行!
优点在哪里?
了解ABPvNext的都知道,他里面有一个概念Dto的概念
比如UserInfo表,那么衍生出了UserInfoAddDto,UserInfoUpdateDto,UserInfoListDto,UserInfoDto
我加一个InputQueryUserInfoModel,表示查询的时候基于这个来查询,默认的字段有page size word 其他的就是要哪个加哪个!
UserInfo这个数据模型是不会对外的,只有Dto对外,比如密码字段,如果你把他从其他Dto中都删除,那么是不是密码被查询出去这个问题就没勒!
PasteForm就是基于Dto的属性来干活的!
比如新增UserInfo,则先会从接口获取UserInfoAddDto的模型属性,比如某一个字段的类型,是否必填,长度等
而上面说的数据列表页面呢,则基于查询的模型InputQueryUserInfoModel来决定有哪些查询项!
这么简单的逻辑,那Form支持哪些呢?
文本,文本分输入框,文本区域,富文本(html)等模式
图片,支持单图,多图,图片宽高限定等
外表,支持某一个字段是其他表的ID,也就是可以实现外表的概念
开关,使用switch或者是checkbox的模式
数字,支持int,number,double等输入,或者限制
时间,支持datetime,date,time,daterange等模式
参数,基于url参数模式,比如为某为.NET分类添加子文章,我们一般的做法就是在分类列表中的.NET,点击添加,把.NET这个分类的ID带到表单添加一个文章
扩展,看懂整个流程后,你可以为自己定义,比如我给小程序中定义了region的支持!

PasteTimer(任务调度器)

这个项目好久没更新了,后面升级了一个PasteTask!
假设你得商城的api服务,你部署了3个容器,那么每个小时需要收集数据到小时报表的时候,谁来执行?
你就需要一个外部的任务调度器来执行!
市面上已经有这样的东西了,为啥还要自己搞?
我能说他们写得太复杂了么?而且我之前还遇到过内存泄漏!!
所以就自己动手丰衣足食了,而且我的支持秒!他们的一般是到分钟!
PasteTask应该是不会开源的,因为里面涉及了一个模块,一个很有意思的模块!
如果PasteTask不开源,那么PasteTimer还会进行更新!

PasteShop(商城平台)

这个没那么快推出,怎么说呢,为了性能,我们连vue都不用,直接用模板,用原生的,如果你得商城使用到了广告推广,那么这个将非常适合你,支持非常多的支付方式,支持多店铺,多商户模式... .. .

还有其他项目还在开发中... .. .