前期准备
拿到足够多的数据做支撑
做足够灵活的分析平台去分析数据
产出风险事件进行阻拦风险
量化风险拦截的价值和不断分析案例进行策略优化
风控技术评估研究
日志选择:以增量日志方式记录存储,hadoop或spark做分析,集群同步到客户端机器上,做同步策略,不同纬度的数据做统计加工计算。
实时监控:监控在每一个环节的交易量和高风险 *** 作,做阀值报警,以默认的规则做处理。
dns防范:防止http对dns的拦截,手动纪录中断被拦截掉的交易流,转向存储中心系统做处理给予用户提示。
报警提醒:在发生重大灾难的同时需要有一套完善的体系提醒风控人员近入作战,以短信或电话的形式发起通知给用户。
数据灾难:数据的历史纪录应该有完整的备库纪录,这种 *** 作不是必须的但是必要的,防止管理员因为误 *** 作导致的数据灾难不容小视,启东应急方案进行恢复。
日志选择:需要在原有基础上做集群数据分析后,统一有一个入口的分析平台做汇总,对不同维度的计算规则做排重,这里我们可以使用elk的方式把数据清洗完成后,做相关的分析调研,实时读库的方式不可取,增量数据库只保留历史的数据,可以对时间做相关的约定,查询的平台统一做相关的调控。
方案的选择和实施
针对现在的数据规则,需要对现有的各方数据做分析指标,做数据仓库,从不同的数据中计算对应的需要风控形成各种渠道的报表数据。如何通过查询海量的历史数据来支撑规则的运算,从分析的角度来看,又是一个IO密集型的应用;利用OLTP(online transaction processing )和OLAP(online analytical processing)做相关的维度计算,主要针对用户、功能、数据片、存储空间、DB设计来做维度计算和方案的优化调整。
大到用hadoop做数据集群算法分析,也可以用spark、storm来做。
简而言之就是分布式框架,那么什么是分布式框架?
分布式计算框架实现了什么?简而言之,基于分布式计算框架的应用,就是一个分布式的应用;那么分布式的应用解决了什么问题?简而言之,就是将请求处理的业务逻辑和所需资源合理地分布到N台服务器上,这里就不在过多介绍。
基于C/S模式的原理,从client到server端的应用,采集需要的数据。Server之间通讯是有开销的,只不过这个开销是MS级的。系统在定位也是基于百万级的应用。
以分层的概念,针对每部的风控模块,需要在特定的时间做调整。缓存的应用:如果是历史级别的数据,可以采用redis、cache来做,防止减少对于I/O的读写 *** 作,减少存储压力的开销。基于款时间的维度对应的风控系统计算,需要我们在处理的同时考虑数据的节点,分批次处理。对于变化多端的数据,建议利用高可用性能存储设计,基于DB设计即可,数据结构要基于范式(NF)设计,不可有冗余免得频繁返工。
数据分离的优先选择
数据库读写分离机制:在初期,风控系统一般都极为简单,此时侯一般通过数据库主从复制/读写分离/Sharding(或slave进行)等机制来保证交易系统的数据库和风控系统数据的同步及读写分离。风控系统对所需要的客户/账户数据、交易数据一般都只进行读 *** 作。
缓存/内存数据库机制:不管是交易系统还是风控系统,高效的缓存系统是提升性能的大杀器,一般会把频繁使用的数据存放到Redis等缓存系统中。例如对风控系统,包括诸如风控规则、风控案例库、中间结果集、黑白名单、预处理结果等数据;对交易系统而言,包括诸如交易参数、计费模板、清结算规则、分润规则、银行路由策略等。对一些高频交易中,基于性能考虑,会采用内存数据库(一般会结合SSD硬盘)。
RPC/SOA架构:要降低交易系统和风控系统的耦合度,在初期系统服务较少的情况下,一般直接采用RabbitMQ/ActiveMQ之类的消息中间件或RPC方式来实现系统间服务的调用。如果系统服务较多,存在服务治理问题,会采用Dubbo之类的SOA中间件来实现系统服务调用,这个期间我们需要支持用异步消息完成rabbitMQ的消息的push/pull处理机制来处理违规数据和异常数据提取。
第一阶段,Java SE基础:Java环境搭建、Java流程控制语句-for循环、switch选择判断、循环嵌套、数组bai拷贝、多维数组、final关键字、构造函数的调用、类的访问权限和路径、面向对象高级特性、Java异常处理、Set,Map,List接口及接口实现类、Java线程、同步阻塞、JavaIO流、文件的 *** 作,复制,读写,删除等。第二阶段,JavaWeb:MySQL安装、管理、创建数据库、MySQL
UPDATE 查询、Mysql高级 *** 作、JDBC、JDBC数据库连接 *** 作,JDBC动态Sql处理、Servlet3.0
网页重定向、Servlet3.0 新增的注解支持、AJAX、responseText属性详解等。第三阶段,Java高级框架-SSH:Struts2异常处理、Struts2+Log4j集成、Struts2和JSON实例、Hibernate5、Hibernate集合映射、Hibernate组件映射、Spring4.0、SpringAOP
+ AspectJ框架、Spring 与其它Web框架集成、Spring Hibernate支持等。第四阶段,Java高级框架-SSM:SpringMVC、Spring MVC生成JSON数据、MyBatis、MyBatis 环境配置及入门、Mybatis set标签、Mybatis trim标签、Shiro、Shiro快速入门教程、Shiro Web应用等。第五阶段,SpringBoot+VUE全栈框架:SpringBoot、全局异常处理、过滤器监听器、EHCache缓存、SpringBoot Quartz定时任务、Vue、Vue.js 安装、模板语法、计算属性、事件处理器、Vue.js 自定义指令、Vue.js 路由等第六阶段,特色课程:ActiveM环境搭建、生产者和消费者、消息持久化 *** 作、RSA数字加密算法、Codebar条形码生成器、zxing二维码生成器、HighCharts统计图、Echarts统计图、网络播放器ckplayer、嵌入式网络播放器,可以浏览器和移动端随意使用第七阶段,互联网框架的高级应用1:分布式服务框架的理解,Dubbo架构设计详解及其核心要点,框架运行原理分析、SpringData数据访问、Lucene搜索引擎、Lucene的全文搜索服务器介绍、索引建立方式、Solr海量数据搜索引擎、Socket网络通信、实现RMI远程对象通讯、使用JMS消息服务、Kafka分布式消息系统、WebService与Restful
WS等第八阶段,互联网框架的高级应用2:Spring Security安全框架、实现Web应用安全控制、缓存应用与EhCache框架、OSCache与JBossCache框架、MyBatis与Hibernate缓存机制、NoSQL应用与SQL调优、MongoDB
NoSQL数据库、Redis内存数据库、实现Redis
Session共享、SQL语句的优化、实现数据库读写分离、WEB应用集群及性能优化、Maven项目管理工具、Web服务器负载均衡、实现Nginx与Tomcat集群、使用LoadRunner测试工具、性能优化之内存调优、代码优化与重构的方法等。
对java有兴趣的小伙伴们,不妨先从java入门开始!B站上有很多的java教学视频,从基础到高级的都有,还挺不错的,知识点讲的很细致,还有完整版的学习路线图。也可以自己去看看,下载学习试试。
1. 大型网站系统的特点
2. 大型网站架构演化历程
2.1. 初始阶段架构
问题:网站运营初期,访问用户少,一台服务器绰绰有余。
特征:应用程序、数据库、文件等所有的资源都在一台服务器上。
描述:通常服务器 *** 作系统使用 linux,应用程序使用 PHP 开发,然后部署在 Apache 上,数据库使用 Mysql,通俗称为 LAMP。汇集各种免费开源软件以及一台廉价服务器就可以开始系统的发展之路了。
2.2. 应用服务和数据服务分离
问题:越来越多的用户访问导致性能越来越差,越来越多的数据导致存储空间不足,一台服务器已不足以支撑。
特征:应用服务器、数据库服务器、文件服务器分别独立部署。
描述:三台服务器对性能要求各不相同:应用服务器要处理大量业务逻辑,因此需要更快更强大的 CPU;数据库服务器需要快速磁盘检索和数据缓存,因此需要更快的硬盘和更大的内存;文件服务器需要存储大量文件,因此需要更大容量的硬盘。
2.3. 使用缓存改善性能
问题:随着用户逐渐增多,数据库压力太大导致访问延迟。
特征:由于网站访问和财富分配一样遵循二八定律:80% 的业务访问集中在 20% 的数据上。将数据库中访问较集中的少部分数据缓存在内存中,可以减少数据库的访问次数,降低数据库的访问压力。
描述:缓存分为两种:应用服务器上的本地缓存和分布式缓存服务器上的远程缓存,本地缓存访问速度更快,但缓存数据量有限,同时存在与应用程序争用内存的情况。分布式缓存可以采用集群方式,理论上可以做到不受内存容量限制的缓存服务。
2.4. 使用应用服务器集群
问题:使用缓存后,数据库访问压力得到有效缓解。但是单一应用服务器能够处理的请求连接有限,在访问高峰期,成为瓶颈。
特征:多台服务器通过负载均衡同时向外部提供服务,解决单一服务器处理能力和存储空间不足的问题。
描述:使用集群是系统解决高并发、海量数据问题的常用手段。通过向集群中追加资源,提升系统的并发处理能力,使得服务器的负载压力不再成为整个系统的瓶颈。
2.5. 数据库读写分离
问题:网站使用缓存后,使绝大部分数据读 *** 作访问都可以不通过数据库就能完成,但是仍有一部分读 *** 作和全部的写 *** 作需要访问数据库,在网站的用户达到一定规模后,数据库因为负载压力过高而成为网站的瓶颈。
特征:目前大部分的主流数据库都提供主从热备功能,通过配置两台数据库主从关系,可以将一台数据库服务器的数据更新同步到一台服务器上。网站利用数据库的主从热备功能,实现数据库读写分离,从而改善数据库负载压力。
描述:应用服务器在写 *** 作的时候,访问主数据库,主数据库通过主从复制机制将数据更新同步到从数据库。这样当应用服务器在读 *** 作的时候,访问从数据库获得数据。为了便于应用程序访问读写分离后的数据库,通常在应用服务器端使用专门的数据访问模块,使数据库读写分离的对应用透明。
2.6. 反向代理和 CDN 加速
问题:中国网络环境复杂,不同地区的用户访问网站时,速度差别也极大。
特征:采用 CDN 和反向代理加快系统的静态资源访问速度。
描述:CDN 和反向代理的基本原理都是缓存,区别在于 CDN 部署在网络提供商的机房,使用户在请求网站服务时,可以从距离自己最近的网络提供商机房获取数据;而反向代理则部署在网站的中心机房,当用户请求到达中心机房后,首先访问的服务器时反向代理服务器,如果反向代理服务器中缓存着用户请求的资源,就将其直接返回给用户。
2.7. 分布式文件系统和分布式数据库
问题:随着大型网站业务持续增长,数据库经过读写分离,从一台服务器拆分为两台服务器,依然不能满足需求。
特征:数据库采用分布式数据库,文件系统采用分布式文件系统。
描述:分布式数据库是数据库拆分的最后方法,只有在单表数据规模非常庞大的时候才使用。不到不得已时,更常用的数据库拆分手段是业务分库,将不同的业务数据库部署在不同的物理服务器上。
2.8. 使用 NoSQL 和搜索引擎
问题:随着网站业务越来越复杂,对数据存储和检索的需求也越来越复杂。
特征:系统引入 NoSQL 数据库及搜索引擎。
描述:NoSQL 数据库及搜索引擎对可伸缩的分布式特性具有更好的支持。应用服务器通过统一数据访问模块访问各种数据,减轻应用程序管理诸多数据源的麻烦。
2.9. 业务拆分
问题:大型网站的业务场景日益复杂,分为多个产品线。
特征:采用分而治之的手段将整个网站业务分成不同的产品线。系统上按照业务进行拆分改造,应用服务器按照业务区分进行分别部署。
描述:应用之间可以通过超链接建立关系,也可以通过消息队列进行数据分发,当然更多的还是通过访问同一个数据存储系统来构成一个关联的完整系统。
纵向拆分:将一个大应用拆分为多个小应用,如果新业务较为独立,那么就直接将其设计部署为一个独立的 Web 应用系统。纵向拆分相对较为简单,通过梳理业务,将较少相关的业务剥离即可。
横向拆分:将复用的业务拆分出来,独立部署为分布式服务,新增业务只需要调用这些分布式服务横向拆分需要识别可复用的业务,设计服务接口,规范服务依赖关系。
2.10. 分布式服务
问题:随着业务越拆越小,存储系统越来越庞大,应用系统整体复杂程度呈指数级上升,部署维护越来越困难。由于所有应用要和所有数据库系统连接,最终导致数据库连接资源不足,拒绝服务。
特征:公共业务提取出来,独立部署。由这些可复用的业务连接数据库,通过分布式服务提供共用业务服务。
3. 大型网站架构模式
3.1. 分层
大型网站架构中常采用分层结构,将软件系统分为应用层、服务层、数据层:
分层架构的约束:禁止跨层次的调用(应用层直接调用数据层)及逆向调用(数据层调用服务层,或者服务层调用应用层)。
分层结构内部还可以继续分层,如应用可以再细分为视图层和业务逻辑层;服务层也可以细分为数据接口层和逻辑处理层。
3.2. 分割
将不同的功能和服务分割开来,包装成高内聚低耦合的模块单元。这有助于软件的开发和维护,便于不同模块的分布式部署,提高网站的并发处理能力和功能扩展能力。
3.3. 分布式
大于大型网站,分层和分割的一个主要目的是为了切分后的模块便于分布式部署,即将不同模块部署在不同的服务器上,通过远程调用协同工作。
分布式意味可以用更多的机器工作,那么 CPU、内存、存储资源也就更丰富,能够处理的并发访问和数据量就越大,进而能够为更多的用户提供服务。
分布式也引入了一些问题:
常用的分布式方案:
3.4. 集群
集群即多台服务器部署相同应用构成一个集群,通过负载均衡设备共同对外提供服务。
集群需要具备伸缩性和故障转移机制:伸缩性是指可以根据用户访问量向集群添加或减少机器;故障转移是指,当某台机器出现故障时,负载均衡设备或失效转移机制将请求转发到集群中的其他机器上,从而不影响用户使用。
3.5. 缓存
缓存就是将数据存放在距离最近的位置以加快处理速度。缓存是改善软件性能的第一手段。
网站应用中,缓存除了可以加快数据访问速度以外,还可以减轻后端应用和数据存储的负载压力。
常见缓存手段:
使用缓存有两个前提:
3.6. 异步
软件发展的一个重要目标和驱动力是降低软件耦合性。事物之间直接关系越少,彼此影响就越小,也就更容易独立发展。
大型网站架构中,系统解耦的手段除了分层、分割、分布式等,还有一个重要手段——异步。
业务间的消息传递不是同步调用,而是将一个业务 *** 作拆分成多阶段,每个阶段间通过共享数据的方式异步执行进行协作。
异步架构是典型的生产者消费模式,二者不存在直接调用。异步消息队列还有如下特性:
3.7. 冗余
大型网站,出现服务器宕机是必然事件。要保证部分服务器宕机的情况下网站依然可以继续服务,不丢失数据,就需要一定程度的服务器冗余运行,数据冗余备份。这样当某台服务器宕机是,可以将其上的服务和数据访问转移到其他机器上。
访问和负载很小的服务也必须部署 至少两台服务器构成一个集群,目的就是通过冗余实现服务高可用。数据除了定期备份,存档保存,实现 冷备份 外;为了保证在线业务高可用,还需要对数据库进行主从分离,实时同步实现 热备份。
为了抵御地震、海啸等不可抗因素导致的网站完全瘫痪,某些大型网站会对整个数据中心进行备份,全球范围内部署 灾备数据中心。网站程序和数据实时同步到多个灾备数据中心。
3.8. 自动化
大型网站架构的自动化架构设计主要集中在发布运维方面:
3.9. 安全
4. 大型网站核心架构要素
架构 的一种通俗说法是:最高层次的规划,难以改变的决定。
4.1. 性能
性能问题无处不在,所以网站性能优化手段也十分繁多:
4.2. 可用性
可用性指部分服务器出现故障时,还能否对用户提供服务
4.3. 伸缩性
衡量伸缩的标准就是是否可以用多台服务器构建集群,是否容易向集群中增删服务器节点。增删服务器节点后是否可以提供和之前无差别的服务。集群中可容纳的总服务器数是否有限制。
4.4. 扩展性
衡量扩展性的标准就是增加新的业务产品时,是否可以实现对现有产品透明无影响,不需要任何改动或很少改动,既有功能就可以上线新产品。主要手段有:事件驱动架构和分布式服务。
4.5. 安全性
安全性保护网站不受恶意攻击,保护网站重要数据不被窃取。
欢迎工作一到五年的Java工程师朋友们加入Java程序员开发: 721575865
群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)