本文目录一览:
2017年,Web 后端出现了哪些新的思想和技术
1. 网络交互的多样性
1.1 Http1.1协议日渐式微,Http2和websocket,以及更多的自定义协议将会成为主流。
Web后端将不仅仅是一个web后端,而变成一个大后端,或者叫 中端+后端(这个概念阿里巴巴很早就有了)。随着移动互联网的发展,以及物联网的兴起(在这里我把mobike的单车看作是物联网的一个终端),用户的接入方式由单纯的浏览器,向着多种接入设备进行演进。 在这个概念之下,用户的定义会更广泛,站在后端的角度看来,连接上服务器的不再是一个个的用户,而是一个个的终端,并存在多个终端同享一个用户的情况(多端登录)。 因此在这个趋势之下,整个后端的接入层(比如nginx之于web)将会走向更广阔的天地,对于任意一个设备来说,他将同时利用多种协议和多种方式连接到不同的接入点来达成自身的功能。
1.2 网络协议与网络信息交互的样式多样性
从最早的webService,到后来的json-rpc,和thrift再到如今的 protobuf(grpc)等等,我们开始为不同的数据交互设计了不同的序列化协议和调用协议,然而受到环境(移动终端的弱网络状态),性能(网关服务,与网络调用)的影响,我们开始使用大量容错性更强,数据量更小的数据传输方式,来满足我们的需求。
在早先的web中,http+from表单的提交成为我们的标配,然而在今天,TCP都不一定成为必选项,UDP和UDP的改进协议都在被不同的公司进行尝试,甚至于KCP都有可能成为大家考虑的方案之一。
2.数据多样性开始成为设计的焦点。
2.1 在早先的web后端中,表设计和功能开发构成了日常工作的绝大部分,所有的后端人员都在试图让一切的用户操作落入CRUD的抽象范畴里(比如 Restful),然而CRUD怎么会满足我们的抽象需求呢。
自从memcached和redis在被大量引入后端开发之后,我们可以看到,后端人员在对数据的理解上有了大量的改变,我们不再单单把数据视为RDBMS里面的一行,而是围绕着业务本身对数据进行了分类。最明显的是,状态数据的引入,在开发中,我们将用户的部分信息,视为一个用户的状态,在状态数据的基础上,让用户的行为变成状态迁移的触发,在表现上看我们让用户的信息存储到redis和memcached 里就是最RDMBS不能有效满足我们的抽象需求的一次改进。
2.2 从狂热的Nosql到Nosql和RDBMS的共存,代表了后端开发人员对数据这一个方式的新理解,而传统的行存储到列存储,到监控常用的基于时间序列的数据库都开始进入了我们的视野。
几年来,大量的开发者,开始将用户产生的数据进行了更详细的归类,不再是rdbms一刀切的方式, 我们会详细地划分出用户的状态数据落入到Nosql,将用户的操作数据落入到RDBMS(表述不一定全,但在类似于订单支付之类的具有幂等性要求的操作中要求事务的完备等),将用户的行为统计落入时间序列数据库, 将用户的大量相关资源(如头像图片)将会落入到我们的对象存储中。在后端开发的手册里,数据格式的多样性成为了必须考虑的问题。
3.围绕着数据的收集,存储,计算,索引查询,分析 成为后端的常态
3.1 后端角色的含义,在人手不足的公司里,很难存在一个专注于后端业务开发的开发人员了,在大数据的浪潮下,后端开发人员开始兼职起了数据系统的开发工程师。 随着互联网大量技术的演进和发展,任何一个职业都很难找到一个明确的界限,因此围绕着数据的收集,存储,计算,分析,和索引查询都会成为后端开发人员的必备技能。
3.2 数据收集
(1) 随着分布式,集群化,多IDC的发展,不同于运维的系统性能收集,后端开发开始着重于收集与应用运营过程相关的各类指标和数据,
除了日常的业务开发,同时还会伴随着应用调用过程的耗时,目标服务可用性等数据的收集,常见的如java的 metrics,zipkin等开源第三方的工具开始被广泛借鉴和引用。
(2) 用户行为和终端信息的上报收集,随着大数据的开展,以及精细化运营的要求,后端逐渐开始接触到用户相关信息和终端运行状态的信息上报,
收集上来的数据不仅用于用户的画像分析,同时也为客服的用户追踪,用户的操作行为做出决策,通常表现在当用户投诉某一笔业务的失败时,便于开发人员的快速定位和排错。
3.3 数据存储
接着上面的数据收集,数据的传输和存储成为了绕不开的功能,kafka的大规模运用,HDFS,HBase等工具也开始成为了后端开发日常的一部分。
3.4 数据计算
然而存储的原始数据是没有价值的,后端又开始了他们的数据清洗和数据处理的道路,storm,spark成为了后端的新秀,与用户运营统计分析(俗称跑策略跑算法)不同,当前语境下的后端数据计算,更多是一个短耗时,小规模的计算,典型的则比如风控系统,和预警系统,针对用户的行为和流量的多少,对恶意用户进行甄别和快速干预。
3.5 数据索引查询
(1) 随着业务的扩充,任意一个app几乎都内置了相应的搜索引擎,Lucene,solr也成为了后端程序员必备的技能之一,不管是精确搜索,还是模糊匹配,后端身上背负的业务也越来越多。
(2) 准实时数据的搜索也将成为常态,在近几年的发展中,如何快速地在一个巨量的数据中,完成RDBMS中的 join,distinct统计等成为后端工程师不得不面对的问题
3.6 数据分析查询
AI和深度学习已经拉开了序幕,围绕着数据本身的挖掘,学习,也开始成为了产品侧的需求,但理想归理想,现实归现实,后端的同学们在这个方向上仍然还是摸索状态,但长远来说跑不了了。
4.架构设计的更进一步
2017年里,SOA的名词正在淡出视野,微服务成了替代SOA的高频词,Serverless也开始走向了广大后端的知识技能图谱,不管是追新也好,满足需求也罢,我也向诸位举例一些常见的单词,然而挂一漏万请诸位担待
4.1 CQRS(命令查询职责分离模式)
将传统CRUD的写操作,进行异步化,后端配合读写数据库的分离。以及消息队列的引入,将写操作相关的一些耗时操作(验证,走流程)等进行异步化,常见的如电商中的订单。
4.2 actor
Erlang的actor的兴起,不管是golang Goroutine,还是scala/java的akka,都在深刻地影响着后端系统的架构设计。
4.3 CRDT和最终一致性
分布式系统的兴起,也带来了可用性和一致性的矛盾问题,协同两个进程间的数据成为了每一个后端绕不过去的坎,为了达成最终一致性,各类方案如雨后春笋般冒出。
4.4 reactive
当android上的流行库Rxjava,从前端走向后台的时候,也意味着后端也开始进入了响应式编程的时代,java的 vert.x就是其中的例子,那种request-response一招破万法的时光不再有了。
5. 运维和devops对后端的要求
5.1 安全,稳定,高效,经济
(1) 随着业务走向稳定,以及互联网的发展,网络服务的安全性开始成为了后端的核心之一,由于法律的不健全,对违法分子的追责难度大,违法成本低,网络安全攻击将会在将来的一段时间内成为常态,这就对后端的程序特别是对外的接口设计提出了更高的要求。
(2) 多机房,异地容灾,数据备份。健壮的后端一直是后端应用的要求之一。新的时间里,后端的可用性,稳定性依然是每一个后端都要面对的问题。
(3) 以前一个用户只有一个电脑,浏览网站的时候,只在获取数据的时候与站点有交互。现在随着电子设备,智能设备的增多,一个用户能够接入网络的设备也在增多,同时长连接和并发数也会增多,因此高性能的接入网关开始成为了后端人员关注的焦点,比如围绕着intel的dpdk各类应用也是纷至沓来。
(4) 经济,利用云服务的即买即用,用完即退的特点,使得在开展运营活动的时候,后端不用向运维征求和购买大量的机器。 然而为了在运营活动的短时冲击和突增流量的情况下后端应用能够平稳地运行,对后端人员的部署和调度能力提出了更高的要求。
5.2 更规范的软件开发流程
git+jenkins+ansible的开源组合,开始无法满足开发和运维的需求,项目管理的集成,测试人员的介入,都要求后端的软件工程工具从各自为阵的开源工具,走向一个大一统的系统,需要我们将 需求,BUG管理,迭代版本,开发,测试,灰度,蓝绿部署流程都进行集成。
5.3 云服务,容器化之争
公有云,私有云,混合云,以及容器等相关的云计算技术,也在推动者后端的技术改革,后端面对的不再仅仅是一个物理机器,或者虚拟机,而是一个更复杂更多样性的环境,对后端业务之外的技术和调度要求将越来越高。
相对于前端,后端实在是一个特别笼统的说法,正如上面提出的观点,很多的技术其实并不属于后端工程师,他们有的时候叫 运营开发工程师,有的叫大数据工程师,但为了相对于前端的划分,因此我把他们的工作内容都划到了后端里面去,毕竟相对于技术研究,他们面对的都是一些技术应用的场合,很多的开源软件只要达到了理解原理如何使用的水平就已经足够应付日常工作了。
webstorm 怎么添加 golang 求助
下载WebStorm 10
安装WebStorm
Windows请参考Win版的安装方式
下载Golang Plugin(最新版本是201)
为WebStorm安装Go Plugin
启动WebStorm(如果你更改了一些默认配置会提示重启)
安装下载好的Golang Plugin
Configure - Plugins
从本地磁盘选择下载好的Go Plugin,安装后重启WebStorm
创建一个Golang项目
选择Empty Project,选择好Golang项目的文件目录,点击Create
创建一个Go文件main.go
设置Golang SDK,并在main.go里编写你的Golang代码
配置Golang运行环境
点击右上角的向下三角形按钮,在弹出窗口点击加号新增一个Go Application
在File项选择我们刚才的main.go文件(请注意提示,记得把文件的包名改为main才可以运行)
点击右上角的绿色三角形运行
到此配置完毕,enjoy coding!
phpstorm golang开发环境如何配置
golang 有编辑器可以用 如国人开发的liteide,或者sublimetext、vim、emacs,为什么一定要用phpstorm?如果你只是做php开发,phpstorm很不错,如果用golang来开发,phpstorm 并不合适
golang ide 什么好用
第一种:LiteIDE
LiteIDE是一个简单的开源IDE,值得注意的是,它是GO语言2012年正式版发布的首个IDE,由Qt开发,它看起来类似于Visual Studio等其他编译器。
由于它是为golang设计的,LiteIDE为开发人员提供了许多有用的功能,包括可配置的构建命令,高级代码编辑器和广泛的golang支持。其他功能包括代码管理、gdb、Delve调试器、自动完成和使用WordApi的主题,基于MIME类型的系统等。
第二种:VS Code
它是微软开发的广受欢迎的开源IDE,有一个开箱即用的go扩展可供VS Code使用。VS Code插件为开发人员提供了很多功能,包括与许多go工具集成。
VS Code通过IntelliSense,内置git集成,直接从编译器调试代码等功能提供智能完成功能;VS Code具有高度可扩展性,并通过其许多扩展提供了许多自定义选项,还提供了几十种语言的支持,成为受开发者欢迎的工具。
第三种:Atom
开发人员可以利用这个Atom IDE改进的语言集成与更智能的编辑器。开源的go-plus软件包使开发人员更容易在GO中进行编程。
Atom和go-plus软件包为golang提供工具,构建流程,linters、vet和coverage工具的支持;其他功能包括自动完成、格式化、测试和文档。
第四种:Vim
Vim有许多插件可以帮助开发人员更轻松地编辑他们的GO代码;Vim-go插件自动安装所有必要的东西,为Vim中的GO开发人员提供更平滑的集成。
Vim-go具有许多有用的功能,包括编译器,改进的语法高亮和折叠,完成支持以及一系列具有集成支持的调试程序。还有一些使用的高级源分析工具,包括GoImplements、GoCallees和GoReferrers。