服务端开发:技术、方法与实用解决方案
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1 服务端开发概述

在互联网领域,服务端的全称为“服务器端”,通常也被称为“后端”,与之对应的客户端则被称为“前端”。服务端和客户端既相互独立,又相辅相成。

1.1.1 服务端开发的定义

在正式介绍服务端开发的定义之前,我们先直观地感受一下服务端和客户端。如图1-1所示,客户端通常直接面向用户,如个人计算机的Web浏览器、手机App,而服务端则通常是部署于机房的一台计算机或一个计算机集群,对用户不可见。客户端和服务端可以基于多种互联网通信协议进行通信。

图1-1 客户端与服务端的关系示意图

(1)什么是客户端

客户端(Client)是指运行于普通客户机(如个人计算机、手机、平板)上的程序,用于收集用户意图、为用户展现服务结果,定位是与用户交互。除了一些只在客户机本地运行的应用程序之外,其他客户端均需要与服务端互相配合运行。

(2)什么是服务端

服务端(Server)是指运行在服务器端的程序,为客户端提供API(Application Programming Interface)服务。服务的内容包括向客户端提供资源、存储客户端数据及进行数据计算等。

(3)客户端与服务端如何协作

目前,软件客户端和服务端的协作分为C/S(Client/Server)和B/S(Browser/Server)两种模式。相应的,客户端程序可分为通用客户端和特定客户端两种。Web浏览器就是一种通用客户端,其主要功能是将用户向服务端请求的资源呈现在浏览器窗口中。资源通常有html、pdf、jpg等格式。主流的Web浏览器有微软的IE、Mozilla的Firefox、苹果公司的Safari、Google的Chrome及Opera软件公司的Opera。手机客户端则是一种特定客户端,是指可以在手机终端上运行的软件,如现在流行的各类App。这类客户端依赖客户端应用程序调用操作系统组件,收集用户意图,为用户展现服务结果,在用户本地处理用户提交的或服务端返回的数据。

(4)什么是服务端开发

服务端开发,简单理解,即开发运行在服务器端的程序。无论B/S模式还是C/S模式,都需要有相应的服务器端程序提供服务。在一些简单的应用场景中,服务端开发主要围绕数据库做CRUD(Create、Retrieve、Update、Delete)的编排服务,但在头部互联网企业的应用场景中,要求则高得多,编码的同时还需要与网络、容器、中间件、数据、搜索、算法、运维、测试、安全等一系列技术体系打交道。

1.1.2 服务端开发的职责

在互联网行业,软件开发项目通常以需求为单位。如图1-2所示,一个完整的软件开发项目涉及需求评审、软件设计、开发、联调、测试、上线等诸多环节。参与角色一般包括产品经理、项目经理、运营、交互、视觉、算法、服务端开发、客户端开发、测试开发等人员,重点项目可能还有法务、财务、风控等相关人员。由于在大多数场景中,核心业务逻辑由服务端实现,因此在项目的整个生命周期中,服务端开发工程师通常要全程参与。

图1-2 互联网行业软件开发项目相关流程

自2012年起,移动互联网高速发展,大量新奇的应用逐渐渗透到人们生活和工作的方方面面。目前,资讯、社交、游戏、消费、出行等丰富多彩的移动互联网应用发展迅猛,正深刻改变着信息时代的社会生活。通过移动互联网,人们可以使用手机、平板、智能手表等移动终端设备浏览新闻、在线聊天、玩网游、看电视、在线阅读、收听及下载音乐等。

随着移动应用的功能越来越丰富,需要服务端处理的业务逻辑的复杂度也越来越高,互联网企业对服务端开发工程师提出了更高的要求。服务端开发工程师的岗位职责远不局限于“开发运行于服务器端的程序”,而是要求工程师同时具备业务分析、产品设计、架构设计、技术攻关、团队协作、文档编写、系统维护等综合能力。事实上,这些能力正是服务端开发的不同阶段所需的。具体而言,服务端开发的阶段可分拆为需求分析、抽象建模、系统设计、数据设计、非功能性设计、编码实现及发布运维,每个阶段都需要相应的能力作为支撑。

在传统软件开发中,工程师的主要职责是根据需求文档进行系统设计和编码实现,侧重于技术而轻业务。但当今的互联网企业则要求服务端工程师“技术与业务并行”。简而言之,服务端工程师不仅要知道“怎么做”,而且要知道“为什么要做”以及“如何做得更好”。