ETJava Beta | Java    注册   登录
  • 搜索:
  • 用我十多年的“奇葩”经验,给在“挂吊瓶”的博客园几点建议

    发表于      阅读(1)     博客类别:Crawler     转自:https://www.cnblogs.com/pastespider/p/18385640
    如有侵权 请联系我们删除  (页面底部联系我们)  

    初识博客园

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

    主要功能

    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都不用,直接用模板,用原生的,如果你得商城使用到了广告推广,那么这个将非常适合你,支持非常多的支付方式,支持多店铺,多商户模式... .. .

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