程序员全栈解决方案


努力搭建一个无偿分享通用技术框架组合的程序员全栈解决方案

技术选型前,各方面深入对比分析;选型后,快速搭建初始环境

只重用超级成熟的基础框架,代码级自由组合构造一个极简框架

每一个技术细节尽量简化,深入浅出实现原理,实现无依赖框架

众产监督基础架构 逻辑极简


编写轻封装的软件架构,让普通人都能监督程序代码块

源码编译前后,绑定监督员加密入链,保持历史可追溯

前端网站

WEB网站、管理系统请尽量使用BootStrap思想实现多端自适应适配,减少手机端、PC端的重复开发。
建议熟练运用@media及栅格化思想,用栅格思想将内容分块,以便实现多端布局
利用好CSS3特性,现在绝大部分设备均很好的支持了CSS3,特别是@media @font

如果项目内容交互既不复杂,也不独特,甚至只是展示型网站,按照下面步骤进行更加高效。
1、确定网站架构和大致内容,如果很模糊,直接进入步骤2
2、浏览各种同类网站、同行项目,搜集200个以上网址
3、全部打开,尽量邀请团队全部成员及决策人一同参与,逐步关掉恨不符合的页面
4、保留个位数的页面,借鉴经验,研究可复用的代码,着手开发设计。


后台管理

无论如何,选择一套自己能够驾驭的后端界面框架。自己能驾驭框架源码。
后台系统通常功能快速迭代,应以实用为主。不建议选择不了解且复杂的漂亮界面框架
避免使用过度封装的框架组件而产生依赖,越陷越深,自定义能力很差。


惯性优化

项目初建时:
实现动静分离。只需加一个g.xxx.xxx子域名别名,所有css/js/img资源都访问这个域名
熟练使用CDN,两个域名分别CDN。注意限流,防止CDN过载费钱。
文件上传后,CDN过的子域名访问,或直接使用存储云。

单台服务器压力增大时:
实现WEB和DB分离,DB和WEB同一个内网。
新建一个廉价服务器的WEB2,多WEB集群演进,确保代码健壮。
DB读写分离,DB读服务器也可以与WEB服务器共用。

多服务器优化:
单网域部署DB服务器。
DB服务器分库、分表,水平拆分。
单独拆分高频应用模块到独立服务器。
WEB集群用硬件支撑。
跨网域部署服务器。
投资硬防。


前沿技术

敬请关注HTML5、CSS3、WebSocket、WebRTC、ES6、HTTP2、超宽屏幕等新技术
2020年javascript暂不建议用ES6特性,使用jQuery成熟框架,建议逐渐减少对jQuery依赖,原生开发。
使用大部分HTML5/CSS3新特性,如动画/音视频/RTC/canvas/localstorage/drag/manifest
WebSocket目前已经被主流浏览器支持,我们也提供了一个简单的Websocket的客户端封装,用于自动重连及心跳包维持。
HTTPS/HTTP2逐渐成为主流,单域名证书完全免费。引用资源应下意识的兼容HTTPS,“<script src="//ciy.cn/ciy.js"/>”


common.js组件

主要封装Cookie读写、NaN变量容错、解析Url参数、ajax通讯封装、其他实用函数
使用函数式编程,功能独立不依赖。
建议前端HTML化,初始化Ajax加载数据,未来将可以使用更多的APP/H5特性,减少对后端的技术依赖
不建议使用jsonp通讯,移动端本地HTML Ajax通讯,请在服务器端配置Access-Control-Allow-Origin

下载ciy.js

APP/微信H5

非系统功能型的初创APP应用,应使用H5或游戏引擎开发。
使用H5开发,方便热更新,快速迭代,可以通用于APP、浏览器和微信等第三方APP。
APP加壳方便,可以使用PhoneGap/APPCan等H5打包加壳工具。
无需过分纠结运行效率,移动设备性能迭代速度相当快。
建议使用WebSocket和WebRTC,实现长连接和实时音视频通讯(WebRTC浏览器兼容性还有待提高)。

应用型H5可以选择一个轻量级前端框架。
目前可以选择的框架很多,有FrameWork7、MUI、WEUI等,可以先选几个尝试
动画效果应自己尝试实现,CSS3动画不难学习。学了这个很多酷炫功能迎刃而解
请切记font-size:??px只能在body部分使用一次,其他地方全部使用em
偶尔还要在PAD上看看显示效果,必要时使用@media进行兼容调整
能用@font解决的界面效果,尽量不用图片
给美术使用的前端框架,Javascript不好调用的前端框架,都不是好框架


H5加壳APP

Android、IOS封装H5代码,实现一套代码多处使用,生成的APK、IPA可以在应用市场上架。
目前比较流行的加壳工具有PhoneGap、APPCan、HBuilder、MUI等,都是大牌工具可以信赖。
Android/IOS加壳不难实现,界面上画一个webview即可,不要考虑多webview页面切换看起来运行效率高的方案
Javascript和原生APP相互通讯,也有大量成熟代码,完全可以自行开发,实现更加原生化的功能。
H5开发主要风险是iOS苹果商店上架被拒,苹果态度暧昧,但大量的事实是可以上架。
商务型APP应用,也可以使用Cocos/LayaAir等游戏引擎开发,效果更好。


CiySocket.js组件

100行Javascript封装Websocket前端,主要实现了自动重连及心跳包维持功能
保持HTML5官方规范调用模式
建议使用WSS 443端口通讯,不要自定义端口
设置客户端发起的心跳包data、心跳包频率
设置重连间隔时间,可以设定多组时间,逐渐增加重连间隔时间,防止服务器过载
心跳包仅用于维持TCP通讯不被路由器关闭,现代网络环境下,客户端主动发起心跳即可
放弃Socket.IO吧。她为了老式浏览器兼容,做了大量工作

下载源码 (暂未整理)

选择PHP

不可避免的编程语言大PK,基于以下原因选择了PHP。
1、初中级PHP工程师在人才市场薪水较低,人力成本低。
2、1998年起,从ASP、C#、JAVA、Python一路走过来,期间也尝试用Node.js、GoLang。
3、PHP7的效率提升很多,PHP扩展也容易开发,社区和运维工具众多。
4、PHP运行稳定,可以开发大型应用,websocket,C++扩展库。
5、后端效能演进,有golang\rust\kotlin作为备选,Workerman成本低。
6、GoLang简单C风格,kotlin对有java基础友好,rust门槛稍高人才不多。首选开源语言,C++做后盾。
7、GoLang是我们重点关注的语言,实际的项目开发也在使用。


WEB PHP框架

推荐使用CIYPHP框架,目录结构极简,前后端分离,DBA与后端逻辑可分离。
封装了Mysql和PDO,数据库简化使用。
封装了加解密、混合url参数、极简结构数据、Ajax函数调用、安全传参、CSV解析等
data.php 封装了数据层,set接口实现了insert和update SQL命令整合。
数据库结构体文档生成工具、自动化代码生成工具、简易后端界面框架、定时执行任务。
附加一套有限使用js的纯CSS效果的UI后台界面,方便学习掌握。

Github 获取CIYPHP源码


Socket PHP框架

基于Workerman的PHP Socket框架,采用端口并发机制,基本实现了无需变量锁的编程方法
选择Workerman而非效率看起来更高的swoole,Workerman完全使用php代码,易于部署,易于完善底层代码。
无需变量锁编程,和没有锁意识的编程是两回事,很多程序员无奈的发现,用户量上来了,程序不稳定了,原因在这里
建议与CiySocket框架结合使用

下载源码 (目前存在单服务器4万并发瓶颈,解决后开放源码)

Linux部署和调优

Linux+Nginx+mariadb+PHP7,可不使用Nginx/Apache等WEB服务器。
Nginx主要负责转发请求,Apache和Nginx都可以作为PHP WEB容器,或直接用PHP7处理WEB请求。
MariaDB是Mysql的分支新版本,也可以尝试使用PostgreSQL。
放弃PHP5.*,用PHP7。
OpenSSL一定要使用1.1.0以上版本,开启HTTP2。
现代服务器需要对Linux内核调优,特别是使用了Websocket技术。

部署文档


WEB集群

从单机房多服务器到多机房可伸缩多集群服务器,代码方面应注意以下几点。
尽量避免使用Session,使用Cookie授权,Token动态变化。
对用户数据库进行区域划分,便于负载均衡器优化转发。
尽量避免Memcache、Redis缓存服务器盲目集群化。
数据库依照读写分离优化、服务器分表、表内分服,依次优化。
Web上传的文件存储尽量使用云存储技术,即使保存本地,也应独立使用一个子域名访问,便于后续迁移。
静态文件与动态文件分开不同服务器,充分利用CDN技术
个别高并发高一致性应用功能,建议高配内存服务器;,普通web应用,推低配服务器即可。
逐步实现微服务集群伸缩自动化。
单集群规模超过3000台后,商业业务试错基本完成。根据业务特性进行更专业的架构。
将集群中稳定的业务,进行SOA改造。
逐步实现微服务集群运维自动化伸缩管理。
重点关注分布式事务。研究幂等模式,补偿模式,TCC模式等,灵活运用。
适时引用ESB,作为SOA接口中心,但不能完全依赖ESB,建议主要实现稳定的接口。


运维工具


服务器安全

服务器安全涉及到方方面面问题较多,下面仅简单做一个提醒。
仅暴露80/443和必要的业务端口,管理端口需要使用时,先操作防火墙。
LB到内网业务服务器,前置堡垒机。
充分使用CDN,有能力跨机房部署服务器。
开发用于跨服数据交互的稳定数据流通道。


代码安全

编写代码习惯和服务器文件夹权限设置习惯,直接影响到代码安全,进而影响服务器安全。
在配置上,关闭Mysql数据库和PHP的Shell执行权限。
用户上传文件夹赋予写权限的同时禁止执行权限。
PHP文件所在文件夹不应该有写权限。
避免直接使用PHP源码在线更新功能或外网可访问的第三方更新工具,应使用Shell内网同步。
GET、POST数据输入,应进行安全判断,不应相信任何用户输入。进一步的,细化到规则过滤。
字符串部分,应检查特殊字符,记录Log,主动发现SQL注入和XSS攻击。
数据库操作尽量交给Web接口,远程不直连数据库。

设计能力

软件工程师,也需要有一些设计能力。
至少熟练掌握Photoshop,切图、图片加工等图片处理。
至少购买1个商业设计网站的会员,方便下载成品图。
至少掌握一个图标设计库,如iconfont。
有意识的搜集整理好看的界面模板或截图。
将已经用过的图片素材,放到一起保存。