后端技术体系框架傍晚的羔羊

这边我推荐我看过的一本书曾宪杰《大型网站系统与Java中间件实践》,对于后端的一些服务如何从单机到分布式讲解是非常深入的,让你能够对后端各个层次的中间件框架有着进一步的理解。

在移动APP的开发过程中,通常后端提供的接口需要以下功能的支持:

一般的做法,使用Nginx做负载均衡,然后在每个业务应用里做API接口的访问权限控制和用户鉴权,更优化一点的方式则是把后两者做成公共类库供所有业务调用。但从总体上来看,这三种特性都属于业务的公共需求,更可取的方式则是集成到一起作为一个服务,既可以动态地修改权限控制和鉴权机制,也可以减少每个业务集成这些机制的成本。这种服务就是API网关,可以选择自己实现。也可以使用开源软件实现,如Kong和NetflixZuul。API网关一般架构如下图所示:

统一认证中心,主要是对APP用户、内部用户、APP等的认证服务,包括

百度开源的Disconf和携程的Apollo是可以在生产环境使用的方案,也可以根据自己的需求开发自己的配置中心,一般选择Zookeeper作为配置存储。

对于外部API调用或者客户端对后端API的访问,可以使用HTTP协议或者RESTful(当然也可以直接通过最原始的socket来调用)。但对于内部服务间的调用,一般都是通过RPC机制来调用的。目前主流的RPC协议有:

这些RPC协议各有优劣点,需要针对业务需求做出最好的选择。

这样,当你的系统服务在逐渐增多,RPC调用链越来越复杂,很多情况下,需要不停的更新文档来维护这些调用关系。一个对这些服务进行管理的框架可以大大减少因此带来的繁琐的人力工作。

传统的ESB(企业服务总线)本质就是一个服务治理方案,但ESB作为一种proxy的角色存在于Client和Server之间,所有请求都需要经过ESB,使得ESB很容易成为性能瓶颈。因此,基于传统的ESB,更好的一种设计如下图所示:

如图,以配置中心为枢纽,调用关系只存在于Client和提供服务的Server之间,就避免了传统ESB的性能瓶颈问题。对于这种设计,ESB应该支持的特性如下:

阿里开源的Dubbo则对以上做了很好的实现,也是目前很多公司都在使用的方案;当当网的扩展项目Dubbox则在Dubbo之上加入了一些新特性。目前,Dubbo已经被阿里贡献给Apache,处于incubating状态。在运维监控方面,Dubbo本身提供了简单的管理控制台dubbo-admin和监控中心dubbo-monitor-simple。Github上的dubboclub/dubbokeeper则是在其之上开发的更为强大的集管理与监控于一身的服务管理以及监控系统。

此外,Netflix的Eureka也提供了服务注册发现的功能,其配合Ribbon可以实现服务的客户端软负载均衡,支持多种灵活的动态路由和负载均衡策略。

在很多业务中,定时调度是一个非常普遍的场景,比如定时去抓取数据、定时刷新订单的状态等。通常的做法就是针对各自的业务依赖Linux的Cron机制或者Java中的Quartz。统一调度中心则是对所有的调度任务进行管理,这样能够统一对调度集群进行调优、扩展、任务管理等。Azkaban和Yahoo的Oozie是Hadoop的流式工作管理引擎,也可以作为统一调度中心来使用。当然,你也可以使用Cron或者Quartz来实现自己的统一调度中心。

对于Java的Quartz这里需要说明一下:这个Quartz需要和SpringQuartz区分,后者是Spring对Quartz框架的简单实现也是目前使用的最多的一种调度方式。但其并没有做高可用集群的支持。而Quartz虽然有集群的支持,但是配置起来非常复杂。现在很多方案都是使用Zookeeper来实现SpringQuartz的分布式集群。

此外,当当网开源的elastic-job则在基础的分布式调度之上又加入了弹性资源利用等更为强大的功能。

日志是开发过程必不可少的东西。打印日志的时机、技巧是很能体现出工程师编码水平的。毕竟,日志是线上服务能够定位、排查异常最为直接的信息。

通常的,将日志分散在各个业务中非常不方便对问题的管理和排查。统一日志服务则使用单独的日志服务器记录日志,各个业务通过统一的日志框架将日志输出到日志服务器上。

可以通过实现Log4j或者Logback的Appender来实现统一日志框架,然后通过RPC调用将日志打印到日志服务器上。

业务应用分为:在线业务应用和内部业务应用。

业务应用基于后端的基础框架开发,针对Java后端来说,应该有以下几个框架:

一般来说,以上几个框架即可以完成一个后端应用的雏形。

缓存、数据库、搜索引擎、消息队列这四者都是应用依赖的后端基础服务,他们的性能直接影响到了应用的整体性能,有时候你代码写的再好也许就是因为这些服务导致应用性能无法提升上去。

不管是业务应用、依赖的后端服务还是其他的各种服务,最终还是要依赖于底层文件存储的。通常来说,文件存储需要满足的特性有:可靠性、容灾性、稳定性,即要保证存储的数据不会轻易丢失,即使发生故障也能够有回滚方案,也要保证高可用。在底层可以采用传统的RAID作为解决方案,再上一层,目前Hadoop的HDFS则是最为普遍的分布式文件存储方案,当然还有NFS、Samba这种共享文件系统也提供了简单的分布式存储的特性。

至于HDFS,如果要使用上面的数据,是需要通过Hadoop的。类似xxonYarn的一些技术就是将非Hadoop技术跑在HDFS上的解决方案。

这里需要补充一点的是,对于很多公司,尤其是离线业务并没有那么密集的公司,在很多情况下大数据集群的资源是被浪费的。因此诞了xxonYarn一系列技术让非Hadoop系的技术可以利用大数据集群的资源,能够大大提高资源的利用率,如DockeronYarn。

接着上面讲的统一日志服务,其输出的日志最终是变成数据到数据高速公路上供后续的数据处理程序消费的。这中间的过程包括日志的收集和传输。

离线数据分析是可以有延迟的,一般针对的是非实时需求的数据分析工作,产生的也是延迟一天的报表。目前最常用的离线数据分析技术除了Hadoop还有Spark。相比Hadoop,Spark性能上有很大优势,当然对硬件资源要求也高。其中,Hadoop中的Yarn作为资源管理调度组件除了服务于MR还可以用于Spark(SparkonYarn),Mesos则是另一种资源管理调度系统。

对于Hadoop,传统的MR编写很复杂,也不利于维护,可以选择使用Hive来用SQL替代编写MR。而对于Spark,也有类似Hive的SparkSQL。

此外,对于离线数据分析,还有一个很关键的就是数据倾斜问题。所谓数据倾斜指的是region数据分布不均,造成有的结点负载很低,而有些却负载很高,从而影响整体的性能。处理好数据倾斜问题对于数据处理是很关键的。

实时数据处理一般情况下都是基于增量处理的,相对于离线来说并非可靠的,一旦出现故障(如集群崩溃)或者数据处理失败,是很难对数据恢复或者修复异常数据的。因此结合离线+实时是目前最普遍采用的数据处理方案。Lambda架构就是一个结合离线和实时数据处理的架构方案。

此外,实时数据分析中还有一个很常见的场景:多维数据实时分析,即能够组合任意维度进行数据展示和分析。目前有两种解决此问题的方案:ROLAP和MOLAP。

如上一小节所述,ROLAP的方案大多数情况下用户离线数据分析,满足不了实时的需求,因此MOLAP是多维数据实时分析的常用方案。对于其中常用的三个框架,对比如下:

其中,Druid相对比较轻量级,用的人较多,比较成熟。

离线和实时数据分析产生的一些报表是给数据分析师、产品经理参考使用的,但是很多情况下,线上的程序并不能满足这些需求方的需求。这时候就需要需求方自己对数据仓库进行查询统计。针对这些需求方,SQL上手容易、易描述等特点决定了其可能是一个最为合适的方式。因此提供一个SQL的即席查询工具能够大大提高数据分析师、产品经理的工作效率。Presto、Impala、Hive都是这种工具。如果想进一步提供给需求方更加直观的ui操作界面,可以搭建内部的Hue。

对于面向用户的线上服务,发生故障是一件很严重的事情。因此,做好线上服务的故障检测告警是一件非常重要的事情。可以将故障监控分为以下两个层面的监控:

监控还有一个关键的步骤就是告警。告警的方式有很多种:邮件、IM、短信等。考虑到故障的重要性不同、告警的合理性、便于定位问题等因素,有以下建议:

THE END
1.后端开发实习生岗位职责(工作内容,是做什么的)ai后端开发实习生岗位职责来自百姓网 注意:该岗位需要实习转正!只看校招慎投!! 岗位职责: 1. 开发、维护基于ChatGPT等AI技术的应用产品; 2. 参与技术调研、可行性分析,系统、流程结构设计、优化、重构; 3. 完成模块的设计与开发; 4. 调试、解决核心技术问题。 https://www.jobui.com/gangwei/houduankaifashixisheng/duty/
2.基于ssm的大学生实习平台系统(前端+后端)基于ssm的大学生实习平台系统(前端+后端) 一、系统简介 本项目采用eclipse工具开发,jsp+spring+spring-mvc+mybatis+jquery技术编写,数据库采用的是mysql,navicat开发工具。 系统一共分为4个角色分别是:管理员,学生,辅导员,企业 二、模块简介 管理员 1、登录https://blog.csdn.net/qq_43485489/article/details/126360658
3.计算机软件实习岗位信息大数据开发实习生-Data字节跳动上海 Java开发实习生亚信科技(中国)有限公司成都 系统架构师(实习生)中国电信宁夏公司宁夏 数据科学实习生-内容质量与数据服务平台字节跳动杭州 后端开发实习生-Data字节跳动北京 大数据开发实习生-抖音/直播/电商/剪映字节跳动杭州 https://shixi.51job.com/top10.php?funtype=05&posttype=mq
4.字节跳动后端开发实习生电商治理平台(有转正机会)字节跳动-后端开发实习生-电商治理平台(有转正机会) 上海&北京·日常实习生 职位描述 1、参与系统架构设计、优化,提升系统性能和开发效率,保证高并发高可靠; 2、通过不断的技术研究和创新,推动业务的快速发展和高效迭代; 3、善于从工作中抽象和归纳问题,用技术方案高效解决。 职位要求 1、学历本科及以上,计算机、https://m.nowcoder.com/discuss/353159383444037632
5.校园交友app小程序前后端搭建手册,系统架构如何选?前后端分离架构 无论选择微服务架构还是单体架构,都建议采用前后端分离的设计。 前端负责页面展示和交互逻辑,后端负责业务逻辑和数据存储。 前后端通过API进行通信和数据交互,提高系统的灵活性和可扩展性。 安全性考虑 在系统架构设计中,需要充分考虑安全性问题。 https://cloud.tencent.com/developer/article/2480358
6.前后端一体开发模式的系统技术架构蓝月亮的技术博客前后端一体开发模式的系统技术架构 在我们实际的开发过程中,我们当前这样定位前端、后端开发人员。 1)前端开发人员:精通JS,能熟练应用JQuery,懂CSS,能熟练运用这些知识,进行交互效果的开发。 2)后端开发人员:会写Java代码,会写SQL语句,能做简单的数据库设计,会Spring和iBatis,懂一些设计模式等。https://blog.51cto.com/u_12190/12048662
7.深圳市一米云智能科技有限公司人脉圈怎么样发现0+脉友Linux云计算架构大数据架构平台架构架构设计系统架构 后端开发实习生 百度 2014.07 - 2014.09(2个月) Linux分布式技术多线程 暂无内容 展开更多 黄先生 凯翼汽车· 运维经理 影响力371 访客1038四川成都 个人简介:汽车制造业运维,任职凯翼汽车运维经理职位,常驻四川;近期有1038位访问者,在脉脉形成影响力371;在2022-10至https://maimai.cn/mai/3ccXxwTc8WEh_hR35FhO33mDgiTuyKeNTu_mXtiHYLE
8.揭秘App开发的后端技术:构建稳定与高效的数字桥梁它涵盖了数据库管理、服务器架构、数据存储、安全性、API开发等多个方面。后端开发者负责处理数据请求、存储和检索,确保用户与应用程序之间的交互流畅,同时保证数据的安全性和隐私。简而言之,后端开发为App提供“幕后”支持,确保整个系统的稳定运行和数据安全。https://pbids.com/aboutUs/pbidsNews/1861309730300989440