• 云原生服务网格Istio原理实践架构与源码解析pdf免费版高清完整版

    编辑点评:df,azw3,eu和moi四种格式都有华为云原生团队600多页的Itio实战精华总结,精品下载站为大家提供的是云原生服务网格Itio:原理、实践、架构与源码解析的电子书,包含了四种格式,df,azw3,eu和moi,需要哪一种都可以,已打包分享,欢迎免费下载。云原生服务网格Itio电子书预览目录大全原理篇第1章你好,Itio21.1Itio是什么21.2通过示例看看Itio能做什么41.3Itio与服务治理61.3.1关于微服务61.3.2服务治理的三种形态81.3.3Itio不只解决了微服务问题101.4Itio与服务网格111.4.1时代选择服务网格111.4.2服务网格选择Itio141.5Itio与Kuerete151.5.1Itio,Kuerete的好帮手161.5.2Kuerete,Itio的好基座181.6本章总结20第2章Itio架构概述212.1Itio的工作机制212.2Itio的服务模型232.2.1Itio的服务242.2.2Itio的服务版本262.2.3Itio的服务实例282.3Itio的主要组件302.3.1itio-ilot302.3.2itio-telemetry322.3.3itio-olicy332.3.4itio-citadel342.3.5itio-galley342.3.6itio-idecar-ijector352.3.7itio-roxy352.3.8itio-igregateway362.3.9其他组件372.4本章总结37第3章非侵入的流量治理383.1Itio流量治理的原理383.1.1负载均衡393.1.2服务熔断413.1.3故障注入483.1.4灰度发布493.1.5服务访问入口543.1.6外部接入服务治理563.2Itio路由规则配置:VirtualService593.2.1路由规则配置示例593.2.2路由规则定义603.2.3HTTP路由(HTTPRoute)633.2.4TLS路由(TLSRoute)783.2.5TCP路由(TCPRoute)813.2.6三种协议路由规则的对比833.2.7VirtualService的典型应用843.3Itio目标规则配置:DetiatioRule893.3.1DetiatioRule配置示例903.3.2DetiatioRule规则定义903.3.3DetiatioRule的典型应用1033.4Itio服务网关配置:Gateway1073.4.1Gateway配置示例1083.4.2Gateway规则定义1093.4.3Gateway的典型应用1123.5Itio外部服务配置:ServiceEtry1203.5.1ServiceEtry配置示例1203.5.2ServiceEtry规则的定义和用法1213.5.3ServiceEtry的典型应用1233.6Itio代理规则配置:Sidecar1263.6.1Sidecar配置示例1263.6.2Sidecar规则定义1263.7本章总结129第4章可扩展的策略和遥测1314.1Itio策略和遥测的原理1314.1.1应用场景1314.1.2工作原理1364.1.3属性1374.1.4Mixer的配置模型1404.2Itio遥测适配器配置1474.2.1Prometheu适配器1484.2.2Fluetd适配器1554.2.3StatD适配器1594.2.4Stdio适配器1614.2.5Ziki适配器1634.2.6厂商适配器1684.3Itio策略适配器配置1694.3.1Lit适配器1694.3.2Deier适配器1714.3.3MemoryQuota适配器1724.3.4RediQuota适配器1754.4KuereteEv适配器配置1784.5本章总结181第5章可插拔的服务安全1825.1Itio服务安全的原理1825.1.1认证1855.1.2授权1895.1.3密钥证书管理1925.2Itio服务认证配置1935.2.1认证策略配置示例1935.2.2认证策略的定义1945.2.3TLS访问配置1965.2.4认证策略的典型应用2005.3Itio服务授权配置2025.3.1授权启用配置2025.3.2授权策略配置2035.3.3授权策略的典型应用2075.4本章总结210第6章透明的Sidecar机制2116.1Sidecar注入2116.1.1SidecarIjector自动注入的原理2146.1.2Sidecar注入的实现2166.2Sidecar流量拦截2196.2.1itale的基本原理2206.2.2itale的规则设置2236.2.3流量拦截原理2246.3本章总结228第7章多集群服务治理2307.1Itio多集群服务治理2307.1.1Itio多集群的相关概念2307.1.2Itio多集群服务治理现状2317.2多集群模式1:多控制面2327.2.1服务DNS解析的原理2337.2.2Gateway连接的原理2377.3多集群模式2:VPN直连单控制面2387.4多集群模式3:集群感知服务路由单控制面2407.5本章总结246实践篇第8章环境准备2488.1在本地搭建Itio环境2488.1.1安装Kuerete集群2488.1.2安装Helm2498.1.3安装Itio2508.2在公有云上使用Itio2538.3尝鲜Itio命令行2558.4应用示例2578.4.1WeatherForecat简介2578.4.2WeatherForecat部署2588.5本章总结259第9章流量监控2609.1预先准备:安装插件2609.2调用链跟踪2619.3指标监控2659.3.1Prometheu2659.3.2Grafaa2689.4服务网格监控2739.5本章总结277第10章灰度发布27810.1预先准备:将所有流量都路由到各个服务的v1版本27810.2基于流量比例的路由27910.3基于请求内容的路由28310.4组合条件路由28410.5多服务灰度发布28610.6TCP服务灰度发布28810.7自动化灰度发布29010.7.1正常发布29110.7.2异常发布294第11章流量治理29611.1流量负载均衡29611.1.1ROUND_ROBIN模式29611.1.2RANDOM模式29811.2会话保持29911.2.1实战目标30011.2.2实战演练30011.3故障注入30111.3.1延迟注入30111.3.2中断注入30311.4超时30411.5重试30611.6HTTP重定向30811.7HTTP重写30911.8熔断31011.9限流31311.9.1普通方式31411.9.2条件方式31511.10服务隔离31711.10.1实战目标31711.10.2实战演练31711.11影子测试31911.12本章总结322第12章服务保护32312.1网关加密32312.1.1单向TLS网关32312.1.2双向TLS网关32612.1.3用SDS加密网关32812.2访问控制33112.2.1黑名单33112.2.2白名单33212.3认证33412.3.1实战目标33412.3.2实战演练33412.4授权33612.4.1命名空间级别的访问控制33612.4.2服务级别的访问控制33912.5本章总结341第13章多集群管理34213.1实战目标34213.2实战演练34213.3本章总结350架构篇第14章司令官Pilot35214.1Pilot的架构35214.1.1Itio的服务模型35414.1.2xDS协议35614.2Pilot的工作流程36014.2.1Pilot的启动与初始化36114.2.2服务发现36314.2.3配置规则发现36814.2.4Evoy的配置分发37614.3Pilot的插件38314.3.1安全插件38514.3.2健康检查插件39014.3.3Mixer插件39114.4Pilot的设计亮点39214.4.1三级缓存优化39214.4.2去抖动分发39314.4.3增量EDS39414.4.4资源隔离39514.5本章总结396第15章守护神Mixer39715.1Mixer的整体架构39715.2Mixer的服务模型39815.2.1Temlate39915.2.2Adater40115.3Mixer的工作流程40315.3.1启动初始化40315.3.2用户配置信息规则处理40915.3.3访问策略的执行41615.3.4无侵入遥测42115.4Mixer的设计亮点42315.5如何开发MixerAdater42415.5.1Adater实现概述42415.5.2内置式Adater的开发步骤42515.5.3独立进程式Adater的开发步骤43015.5.4独立仓库式Adater的开发步骤43715.6本章总结438第16章安全碉堡Citadel43916.1Citadel的架构43916.2Citadel的工作流程44116.2.1启动初始化44116.2.2证书控制器44216.2.3gRPC服务器44416.2.4证书轮换器44516.2.5SDS服务器44616.3本章总结449第17章高性能代理Evoy45017.1Evoy的架构45017.2Evoy的特性45117.3Evoy的模块结构45217.4Evoy的线程模型45317.5Evoy的内存管理45517.5.1变量管理45517.5.2Buffer管理45617.6Evoy的流量控制45617.7Evoy与Itio的配合45717.7.1部署与交互45717.7.2EvoyAPI45817.3本章总结459第18章代理守护进程Pilot-aget46018.1为什么需要Pilot-aget46118.2Pilot-aget的工作流程46118.2.1Evoy的启动46218.2.2Evoy的热重启46518.2.3守护Evoy46618.2.4优雅退出46718.3本章总结468第19章配置中心Galley46919.1Galley的架构46919.1.1MCP47019.1.2MCPAPI47019.2Galley的工作流程47119.2.1启动初始化47119.2.2配置校验47619.2.3配置聚合与分发47919.3本章总结482源码篇第20章Pilot源码解析48420.1进程启动流程48420.2关键代码分析48620.2.1CofigCotroller48620.2.2ServiceCotroller49020.2.3xDS异步分发49520.2.4配置更新预处理50320.2.5xDS配置的生成及分发50920.3本章总结514第21章Mixer源码解析51521.1进程启动流程51521.1.1ruServer通过ewServer新建Server对象51721.1.2启动MixergRPCServer52021.2关键代码分析52021.2.1监听用户的配置52021.2.2构建数据模型52421.2.3Check接口53321.2.4Reort接口53621.2.5请求分发53921.2.6协程池54121.3本章总结543第22章Citadel源码解析54422.1进程启动流程54422.2关键代码分析54822.2.1证书签发实体ItioCA54822.2.2SecretCotroller的创建和核心原理55122.2.3CAServer的创建和核心原理55622.3本章总结558第23章Evoy源码解析55923.1Evoy的初始化55923.1.1启动参数oottra的初始化55923.1.2AdmiAPI的初始化56023.1.3Worker的初始化56223.1.4CDS的初始化56223.1.5LDS的初始化56323.1.6GuardDog的初始化56423.2Evoy的运行和建立新连接56423.2.1启动worker56523.2.2Liteer的加载56523.2.3接收连接56623.3Evoy对数据的读取、接收及处理56723.3.1读取数据56823.3.2接收数据56823.3.3处理数据56923.4Evoy发送数据到服务端57023.4.1匹配路由57123.4.2获取连接池57223.4.3选择上游主机57223.5本章总结573第24章Galley源码解析57424.1进程启动流程57424.1.1RuServer的启动流程57724.1.2RuValidatioServer的启动流程57824.2关键代码分析58024.2.1配置校验58024.2.2配置监听58424.2.3配置分发58524.3本章总结589结语590附录A源码仓库介绍592附录B实践经验和总结598关于作者Itio社区成员。华为云应用服务网格架构师,现负责华为云容器服务Itio产品化工作。从事华为云PaaS平台产品设计研发,在Kuerete容器服务,微服务架构,云服务目录,大数据,APM,DevO工具等多个领域有深入研究与实践。图书介绍《云原生服务网格Itio:原理、实践、架构与源码解析》分为原理篇、实践篇、架构篇和源码篇,由浅入深地将Itio项目庖丁解牛并呈现给读者。原理篇介绍了服务网格技术与Itio项目的技术背景、设计理念与功能原理,能够帮助读者了解服务网格这一云原生领域的标志性技术,掌握Itio流量治理、策略与遥测和安全功能的使用方法。实践篇从零开始搭建Itio运行环境并完成一个真实应用的开发、交付、上线监控与治理的完整过程,能够帮助读者熟悉Itio的功能并加深对Itio的理解。架构篇剖析了Itio项目的三大核心子项目Pilot、Mixer、Citadel的详细架构,帮助读者熟悉Evoy、Galley、Pilot-aget等相关项目,并挖掘Itio代码背后的设计与实现思想。源码篇对Itio各个项目的代码结构、文件组织、核心流程、主要数据结构及各主要代码片段等关键内容都进行了详细介绍,读者只需具备一定的Go语言基础,便可快速掌握Itio各部分的实现原理,并根据自己的兴趣深入了解某一关键机制的完整实现。本书提供源码下载,参见htt://githu.com/cloudativeook/cloud-ative-itio。无论是对于刚入门Itio的读者,还是对于已经在产品中使用Itio的读者,本书都极具参考价值。...

    2022-04-10 华为云的架构 华为云系统架构

  • 微服务架构与实践PDF版免费电子版

    编辑点评:对于微服务架构的概念,相信大家应该都不陌生,无论使用AacheDuo、还是SrigCloud,都可以去尝试微服务,把复杂而庞大的业务系统拆分成一些更小粒度且独立部署的Ret服务。但是这个过程,具体应该怎么做?现有的条件下到底要不要做微服务?服务拆分成什么粒度才是合适的?遗留的老系统需要如何考虑重构改造?有哪些坑需要我们注意?系统怎么在分布式服务下实现数据的一致性和服务的高可用可伸缩?拆分的过程中系统数量增多,测试、部署、运维、监控,又应该如何处理?内容简介随着RESTful、云计算、DevO、持续交付等概念的深入人心,微服务架构逐渐成为系统架构的一个代名词。本书首先从理论出发,介绍了微服务架构的概念、诞生背景、本质特征以及优缺点;然后基于实践,探讨了如何从零开始构建第一个微服务,包括HelloWorldAPI、Docker映像构建与部署、日志聚合、监控告警、持续交付流水线等;最后,在进阶部分讨论了微服务的轻量级通信、消费者驱动的契约测试,并通过一个真实的案例描述了如何使用微服务架构改造遗留系统。全书内容丰富,条理清晰,通俗易懂,是一本理论结合实践的微服务架构的实用书籍。本书不仅适合架构师、开发人员、测试人员以及运维人员阅读,也适合正在尝试使用微服务架构解耦历史遗留系统的团队或者个人参考,希望本书能在实际工作中对读者有所帮助。作者简介ThoughtWork的首席咨询师王磊是国内较早倡导和实践微服务的先行者。王磊是开源软件的爱好者和贡献者,社区活动的参与者,《RuyGem开发实战》(PracticalRuyGem)一书的译者,GDCR西安的组织者。他于2012年加入ThoughtWork,为国内外诸多客户提供项目交付和咨询服务;在加入ThoughtWork之前,曾就职过多家知名外企,具有丰富的敏捷项目实战经验。目前致力于微服务架构、高可用的We应用以及DevO的研究与实践。微服务架构与实践PDF预览目录第1部分基础篇第1章单块架构及其面临的挑战31.1三层应用架构41.1.1三层应用架构的发展41.1.2什么是三层架构51.1.3三层架构的优势61.2单块架构61.2.1什么是单块架构61.2.2单块架构的优势71.2.3单块架构面临的挑战81.3小结12第2章微服务架构综述132.1什么是微服务架构132.1.1多微才够微142.1.2单一职责172.1.3轻量级通信172.1.4独立性192.1.5进程隔离202.2微服务的诞生背景222.2.1互联网行业的快速发展232.2.2敏捷、精益方法论的深入人心232.2.3单块架构系统面临的挑战232.2.4容器虚拟化技术232.3微服务架构与SOA242.3.1SOA概述242.3.2微服务与SOA252.4微服务的本质262.4.1服务作为组件272.4.2围绕业务组织团队282.4.3关注产品而非项目292.4.4技术多样性312.4.5业务数据独立322.4.6基础设施自动化332.4.7演进式架构332.5微服务不是银弹342.5.1分布式系统的复杂度352.5.2运维成本362.5.3部署自动化362.5.4DevO与组织架构372.5.5服务间的依赖测试372.5.6服务间的依赖管理372.6小结38第2部分实践篇第3章构建第一个服务413.1场景分析413.2任务拆分43第4章HelloWorldAPI454.1API实现454.1.1开发语言――Ruy454.1.2We框架――Grae464.1.3API的具体实现474.2代码测试与静态检查504.2.1代码测试504.2.2测试覆盖率统计534.2.3静态检查544.2.4代码复杂度检查57第5章构建Docker映像615.1定义Dockerfile615.2配置Docker主机635.3构建Docker映像645.4运行Docker容器645.5发布Docker映像655.6小结69第6章部署Docker映像716.1基础设施AWS716.2基础设施自动化736.3部署Docker映像806.4自动化部署816.5小结84第7章持续交付流水线857.1持续集成环境857.2提交阶段877.3验证阶段917.4构建阶段917.5发布阶段947.6小结96第8章日志聚合978.1日志聚合工具简介978.2Sluk的核心998.3安装Sluk索引器1008.4安装Sluk转发器1018.5日志查找1028.6告警设置1038.7小结104第9章监控与告警1059.1Nagio简介1059.2Nagio的工作原理1079.3Nagio安装1089.4Nagio的配置1099.5监控roduct-ervice1119.6告警1139.7小结114第10章功能迭代11510.1定义模型11610.2持久化模型11710.3定义表现形式11910.4实现API12210.5服务描述文件12510.6小结127第3部分进阶篇第11章微服务与持续交付13111.1持续交付的核心13211.2微服务架构与持续交付13311.2.1开发13311.2.2测试13711.2.3持续集成13911.2.4构建13911.2.5部署14011.2.6运维14311.3小结144第12章微服务与轻量级通信机制14512.1同步通信与异步通信14512.1.1概述14512.1.2同步通信与异步通信的选择14612.2远程调用RPC14712.2.1远程过程调用的核心14712.2.2远程方法调用14812.2.3远程过程调用的弊端14812.3REST14912.3.1概述14912.3.2REST的核心15012.3.3REST的优势15212.3.4REST的不足15212.3.5本节小结15512.4HAL15512.4.1概述15512.4.2HAL的核心15612.4.3HAL浏览器16012.5消息队列16112.5.1核心部分16212.5.2访问方式16312.5.3消息队列的优缺点16412.6后台任务处理系统16512.6.1核心部分16512.6.2服务回调16612.6.3一个例子16712.6.4后台任务与微服务16912.7小结170第13章微服务与测试17113.1微服务的结构17113.2微服务的测试策略17313.3微服务的单元测试17513.3.1单元测试综述17513.3.2单元测试的内容17613.4微服务的集成测试17913.4.1集成测试综述17913.4.2集成测试的实施方法17913.4.3集成测试的内容18013.5基于消费者驱动的契约测试18113.5.1集成测试存在的弊端18113.5.2什么是契约18313.5.3什么是契约测试18413.5.4契约测试的方法18513.5.5Pact实现契约测试18713.5.6一个例子19213.5.7本节小结20513.6微服务的组件测试20513.6.1组件测试概述20513.6.2组件测试的方法20613.6.3本节小结20713.7微服务的端到端测试20813.7.1端到端测试概述20813.7.2端到端测试的内容20813.7.3本节小结20913.8小结210第14章使用微服务架构改造遗留系统21114.1背景与挑战21114.2改造策略21214.2.1昀小修改21214.2.2功能剥离21214.2.3数据解耦21314.2.4数据同步21314.2.5迭代替换21414.3快速开发实践21514.3.1快速开发模板21514.3.2代码生成工具21714.3.3持续集成模板21714.3.4一键部署工具21714.4微服务架构下的新系统21814.5小结220序言最近,在软件架构设计领域,微服务非常火。一提到软件开发、架构设计,如果不提微服务,不说说微服务的架构风格,那就落伍了,OUT了。当然了,支持微服务的技术也是层出不穷,如微服务1.0中比较有名的来自Srig家族的SrigCloud,以及国内在开源领域的翘楚阿里系中的Duo。其中,SrigCloud提供了完整的微服务解决方案,为开发者提供了快速构建分布式系统的通用模型的工具,包括配置管理、服务发现、熔断器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态等。而Duo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及服务治理方案。随着微服务的持续火热,微服务2.0中的ServiceMeh也火起来了。ServiceMeh,即“服务网格”,作为服务间通信的基础设施层,ServiceMeh可以被看作是微服务间的TCP/IP,负责服务之间的网络调用、限流、熔断和监控。对于编写服务的开发人员来说,一般无须关心TCP/IP这一层(比如通过HTTP协议的RESTful应用),同样使用ServiceMeh也就无须关心服务之间的那些原来是通过应用程序或者其他框架实现的事情,比如SrigCloud、OSS,现在只要交给ServiceMeh就可以了。其实,上述说了那么多,介绍了那么多,基本都是集中在概念层面,在理论的层次上,以及支持微服务的开发技术、开发框架上,缺少这些概念、理论、技术和框架在实际项目中具体地应用。对于大多数开发人员、架构师来说,除了理解微服务相关的概念,熟悉微服务相关的技术和框架,更关心如何在实际的项目中,应用这些概念、技术和框架。而这些,正是现在所欠缺的。笔者从事软件开发多年,参与和指导过多个项目的架构设计,经历过单体架构、分布式架构、SOA架构,对软件架构的发展历史有一定的了解。同时,在架构设计过程中,笔者也拜读了多位架构大师的著作,如温昱老师的《软件架构设计》、《一级架构师》,PeterEele和PeterCri的《软件架构设计的过程》等,以及各位技术大咖们在互联网上分享的各类架构相关的文档,使我受益匪浅。在此,我衷心的对这些前辈们表示由衷的感谢,谢谢你们对于知识的分享,以及无私奉献的精神。最近,笔者有幸参与了某银行的一个采用微服务架构风格的项目,实践了一下微服务架构。更确切地说,该项目是分布式服务架构向微服务架构的演进,使用更细粒度的服务和一组设计准则来考虑大规模的、复杂的系统架构设计,并非一个纯粹的微服务架构风格的项目。秉着知识共享的精神,笔者写了这篇“微服务架构设计实践”的文章,一方面是对自己在架构设计方面的一个阶段性总结,另一方面是希望给其他刚刚从事软件架构设计的人员一个真实的、具体的软件架构过程的实践参考,为他们提供一个完整的实践案例。在写这篇文章的过程中,在介绍微服务、软件架构设计思想的概念、方法论时,引用了各位大师、技术大咖们关于微服务、架构设计的文章中的内容,在此衷心地表示感谢。对于引用的内容,笔者并非简单地摘抄,而是结合笔者的理解和实践,做了适当的调整。如果存在不适、错误的地方,希望各位及时地指出,我将积极的采纳和修改。...

    2022-04-10 微服务系统架构 微服务体系架构

  • 游戏引擎架构第一版、第二版pdf高清版|百度网盘下载

    编辑点评:《游戏引擎架构》同时涵盖游戏引擎软件开发的理论及实践,并对多方面的题目进行探讨。本书讨论到的概念及技巧实际应用于现实中的游戏工作室,小编今天给大家准备了游戏引擎架构df,感兴趣的就快来下载阅读吧!内容简介《游戏引擎架构》同时涵盖游戏引擎软件开发的理论及实践,并对多方面的题目进行探讨。本书讨论到的概念及技巧实际应用于现实中的游戏工作室,如艺电及顽皮狗。虽然书中采用的例子通常依据一些专门的技术,但是讨论范围远超于某个引擎或API。文中的参考及引用也非常有用,可让读者继续深入游戏开发过程的任何特定方向。《游戏引擎架构》为一个大学程度的游戏编程课程而编写,但也适合软件工程师、业余爱好者、自学游戏程序员,以及游戏产业的从业人员。通过阅读《游戏引擎架构》,资历较浅的游戏工程师可以巩固他们所学的游戏技术及引擎架构的知识,专注某一领域的资深程序员也能从本书更为全面的介绍中获益。百度网盘截图文件目录/k41.et共享/游戏引擎架构|├──游戏引擎架构GameEgieArchitecture_JaoGregory,译者_叶劲峰.df146.0MB|├──游戏引擎架构(第2版)_JaoGregory.df406.0MB...

    2023-01-23 游戏引擎编程语言 编写游戏引擎

  • Spring Cloud 微服务分布式架构开发实战(txt+pdf+epub+mobi电子书下载)|百度网盘下载

  • 大话代码架构:项目实战版(txt+pdf+epub+mobi电子书下载)|百度网盘下载

  • 前端架构设计(txt+pdf+epub+mobi电子书下载)|百度网盘下载

  • Spring Cloud 微服务分布式架构开发实战(txt+pdf+epub+mobi电子书下载)|百度网盘下载

  • 2020马哥Linux云计算架构高薪班/名师亲授/协议班价值15800元(不完整版),百度网盘,阿里云盘下载

    本课程来自马哥教育:2020年马哥教育Liux云计算架构高薪班/名师亲授/协议班价值15800元,由马哥教育教学总监南山先生讲授。课程讲得很好,配套实验手册和笔记物有所值。课程体系大纲介绍:liux基础、服务和安全Liux集群、We站点架构及组件、运维工具、分布式存储系统、存储服务、虚拟化及容器技术、云计算掌握(3大运维基础夯实)解决学生入]难点,确保学生100%入门按照企业环境标准要求实现:Liux掌握系统安装、管理和使用Shell脚本、网络、安全攻防、企业级服务应用。课程更新到11章暂时不完整,不需要问客服是否完整。如果后期有完整的,会补上。!适合人群:大学生毕业就业寻求转岗技术liux提升充电职场升值加薪自我实现创业2020马哥Liux云计算架构高薪班/名师亲教/协议班视频截图课程目录:马哥教育2020Liux云计算运维工程师课程[19.2G]┣━━Liux2020课程视频[19.2G]┃┣━━01-马哥教育-年薪30万Liux云计算课程-云计算课程概览和计算机基础知识[2.3G]┃┃┣━━1计算机基础知识.avi[701.7M]┃┃┣━━2由计算机服务器硬件组成的.avi[675.6M]┃┃┣━━3操作系统基础知识.avi[380.4M]┃┃┗━━4Liux操作系统的起源和哲学思想.avi[608.3M]┃┣━━02-马哥教育-年薪30万Liux云计算课程-Liux安装和操作系统Liux基础命令[1.6G]┃┃┣━━2CetOS8及Uutu安装各种操作系统版本等.avi[394.8M]┃┃┣━━3Liux登录和基本操作.avi[529.7M]┃┃┣━━4Liux命令执行过程和命令类型.avi[305.3M]┃┃┗━━5Liux常见命令.avi[384.9M]┃┣━━03-马哥教育-年薪30万Liux云计算课程-Liux命令帮助和文件管理命令[1.6G]┃┃┣━━1命令历史和帮助.avi[405.2M]┃┃┣━━2帮助命令的用法.avi[416.9M]┃┃┣━━3文件系统目录结构和基本文件操作命令.avi[504.6M]┃┃┗━━4复制和移动文件等基本操作.avi[263.2M]┃┣━━04-马哥教育-年薪30万Liux云计算课程-Liux重定向管道技术和用户管理命令[1.6G]┃┃┣━━1详细说明硬链接和软链接.avi[332.5M]┃┃┣━━2标准输出和错误重定向.avi[337.5M]┃┃┣━━3重定向和管道.avi[385.2M]┃┃┣━━4用户及组管理及相关配置文件.avi[291.1M]┃┃┗━━5用户和组的管理命令.avi[281.4M]┃┣━━05-马哥教育-年薪30万Liux云计算课程-文件权限管理和文本编辑工具vim[1.7G]┃┃┣━━1用户和组相关命令.avi[364.7M]┃┃┣━━2文件权限管理和默认权限管理.avi[347.1M]┃┃┣━━3文件的特殊权限和FACL.avi[327.7M]┃┃┣━━4文本编辑工具VIM.avi[338.5M]┃┃┗━━5文本编辑工具VIM.avi[323.3M]┃┣━━06-马哥教育-年薪30万Liux云计算课程-文本处理命令和文本搜索工具gre[1.4G]┃┃┣━━1文本处理工具.avi[430.6M]┃┃┣━━2文本处理工具.avi[338.6M]┃┃┣━━3正则表达式详解.avi[353.9M]┃┃┗━━4扩展正则表达式和gre.avi[309.8M]┃┣━━07-马哥教育-年薪30万Liux云计算课程-hell脚本编程基础介绍[1.7G]┃┃┣━━1hell脚本编程基基本变量.avi[420.1M]┃┃┣━━2hell脚本编程基本算术和逻辑操作.avi[309M]┃┃┣━━3hell脚本编程基础的特殊变量.avi[343.8M]┃┃┣━━4hell脚本编程基本条件测试.avi[394.8M]┃┃┗━━5hell配置环境文件.avi[281.9M]┃┣━━08-马哥教育-年薪30万Liux云计算课程-文件包装压缩命令和文本处理命令ed[2G]┃┃┣━━1脚本编程条件分支判断if和cae.avi[371.7M]┃┃┣━━2文件的查找locate和fid.avi[419.1M]┃┃┣━━3xarg文件压缩和包装工具.avi[637.8M]┃┃┣━━4三剑客之一的文本处理ed基本用法.avi[331.6M]┃┃┗━━5三剑客之一的文本处理ed生产实战技能.avi[237.4M]┃┣━━09-马哥教育-年薪30万Liux云计算课程-Liux软件包管理命令和私人软件包仓库管理[1.7G]┃┃┣━━2软件运行环境及编译过程.avi[264.3M]┃┃┣━━3软件包的相关概念和组成.avi[382.9M]┃┃┣━━4rm常用的包管理器.avi[352.8M]┃┃┣━━5实现yum仓库配置.avi[460.4M]┃┃┗━━6实现内部私有yum源.avi[260.9M]┃┣━━10-马哥教育-年薪30万Liux云计算课程-源码编译安装软件与磁盘分区管理命令[2.5G]┃┃┣━━1C详细说明源代码编译安装过程.avi[416.7M]┃┃┣━━2httd编译安装,脚本自动编译安装.avi[511.6M]┃┃┣━━3一键安装脚本httd和uutu软件包管理.avi[458.1M]┃┃┣━━4磁盘结构及分区模式MBR和GPT.avi[929.7M]┃┃┗━━5分区管理相关工具.avi[239.6M]┃┗━━11-马哥教育-年薪30万Liux云计算课程-文件系统挂载管理及RAID以及逻辑卷管理[1.2G]┃┣━━1管理和挂载文件系统.avi[525.9M]┃┣━━2持久挂载和wa管理.avi[250.2M]┃┣━━3各种RAID逻辑卷的工作原理.avi[234M]┃┗━━4逻辑卷管理和快照.avi[250.5M]┣━━Liux2020资料云盘[27.9K]┃┗━━03资料[27.9K]┃┣━━log[8.8K]┃┃┗━━.log[8.8K]┃┣━━crit39[10.8K]┃┃┗━━hello【.com】[10.8K]┃┗━━crit[8.3K]┃┣━━ccmd-1.4.h[2.8K]┃┗━━haoi_tower_1.1.h[5.5K]┗━━马哥教育2020Liux云计算运维工程师课程大纲(原版).df[12.3M]相关下载点击下载...

    2022-04-03 云计算技术架构 云计算系统架构

  • Spring Cloud 微服务分布式架构开发实战(txt+pdf+epub+mobi电子书下载)|百度网盘下载

    作者:肖睿陈昊王社出版社:人民邮电出版社格式:AZW3,DOCX,EPUB,MOBI,PDF,TXTSrigCloud微服务分布式架构开发实战试读:前言在这个万物互联的时代,越来越多的人和物成为互联网上的节点,不断扩充着互联网这张大网的边界。节点即价值,更多的节点意味着更大的价值。如何去承载更多的节点成为IT从业人士必须要解决的问题。本书重点介绍基于SrigCloud的分布式应用开发。全书以票务网站大觅网项目的应用场景为例,通过解决方案形式的内容安排引领读者学习分布式架构开发。各章具体内容安排如下。第1章:微服务架构与项目设计。详细分析大觅网的业务场景并讲解微服务架构相关内容。主要内容包括如何依据微服务架构的设计原则设计大觅网项目的业务架构、应用架构、技术架构、部署架构以及数据库架构,在介绍微服务架构时,提出SrigCloud解决方案。第2章:SrigCloud初体验。详细讲解SrigCloud微服务架构。首先介绍SrigCloud框架的概念、和SrigBoot框架的关系以及SrigCloud的体系架构,接下来介绍SrigCloud的三个重要组件的使用,分别为使用Eureka实现注册中心及注册服务、使用Feig实现声明式REST调用、使用Hytrix实现微服务的容错处理,最后介绍如何基于微服务原则对大觅网进行架构搭建。第3章:虚拟化技术Docker+Jeki。详细讲解分布式开发中经常应用的虚拟化Docker技术和实现自动发布的Jeki技术。首先介绍Docker的基础概念、实现原理、操作命令,接下来介绍如何基于Docker技术实现大觅网开发和测试环境的快速搭建,最后基于DockerComoe+Jeki+Git讲解如何实现大觅网项目在开发、测试、线上环境中的自动发布。第4章:分布式日志处理。主要讲解如何在分布式项目中跟踪子项目间的请求、如何收集各子项目的日志。首先介绍如何使用SrigCloud组件Sleuth实现微服务跟踪,接下来介绍如何使用ELK+Kafka实现微服务系统的日志收集。第5章:分布式业务实现。主要讲解分布式开发下两个常见问题的解决方案,即分布式事务问题和分布式线程安全问题。以企业中常用的消息中间件RaitMQ为例讲解如何使用消息中间件RaitMQ实现分布式事务,以及如何使用Redi-etx实现分布式系统下的线程同步。第6章:分布式部署实现。主要讲解SrigCloud架构的微服务项目如何部署,包括使用SrigCloudRio实现服务负载均衡、使用SrigCloudZuul实现服务统一网关、使用SrigCloudCofig实现分布式统一配置。第7章:分布式数据存储。主要讲解如何使用分布式搜索引擎Elaticearch实现商品全文检索。首先介绍Elaticearch的相关概念、运行原理、语法,以及如何在大觅网中进行Elaticearch的集成,接下来介绍Mycat的概念、语法,以及使用Mycat实现大觅网订单库的水平分库。第8章:集成测试。主要介绍如何对已开发完毕的分布式项目进行系统性的测试,包括如何使用JMeter进行压力测试以及如何使用Soar进行代码规范测试。除了以上有关SrigCloud微服务架构解决方案的内容外,本书还涵盖了敏捷项目管理框架Scrum、分布式版本管理Git、代码检测工具Soar等相关内容。本书由课工场大数据开发教研团队组织编写,参与编写的还有陈昊、王社、胡艳蓉、邓小飞、黄兴等院校老师。由于时间仓促、书中不足或疏漏之处在所难免,殷切希望广大读者批评指正。智慧教材使用方法扫一扫查看视频介绍由课工场“大数据、云计算、全栈开发、互联网UI设计、互联网营销”等教研团队编写的系列教材,配合课工场A及在线平台的技术内容更新快、教学内容丰富、教学服务反馈及时等特点,结合二维码、在线社区、教材平台等多种信息化资源获取方式,形成独特的“互联网+”形态——智慧教材。智慧教材为读者提供专业的学习路径规划和引导,读者还可体验在线视频学习指导,按如下步骤操作可以获取案例代码、作业素材及答案、项目源码、技术文档等教材配套资源。1.下载并安装课工场A。(1)方式一:访问网址www.ekgc.c/a,根据手机系统选择对应课工场A安装,如图1所示。图1课工场A(2)方式二:在手机应用商店中搜索“课工场”,下载并安装对应A,如图2、图3所示。图2iPhoe版手机应用下载图3Adroid版手机应用下载2.登录课工场A,注册个人账号,使用课工场A扫描书中二维码,获取教材配套资源,依照如图4至图6所示的步骤操作即可。图4定位教材二维码图5使用课工场A“扫一扫”扫描二维码图6使用课工场A免费观看教材配套视频3.获取专属的定制化扩展资源。(1)普通读者请访问htt://www.ekgc.c/的“教材专区”版块,获取教材所需开发工具、教材中示例素材及代码、上机练习素材及源码、作业素材及参考答案、项目素材及参考答案等资源(注:图7所示网站会根据需求有所改版,下图仅供参考)。图7从社区获取教材资源(2)高校老师请添加高校服务QQ群:1934786863(如图8所示),获取教材所需开发工具、教材中示例素材及代码、上机练习素材及源码、作业素材及参考答案、项目素材及参考答案、教材配套及扩展PPT、PPT配套素材及代码、教材配套线上视频等资源。图8高校服务QQ群第1章微服务架构与项目设计技能目标了解大觅网业务场景掌握微服务架构相关概念掌握微服务架构设计理念了解大觅网架构设计了解大觅网项目管理设计本章任务学习本章内容,需要完成以下4个工作任务。记录学习过程中遇到的问题,可以通过自己的努力或访问ekgc.c解决。任务1:了解大觅网业务场景任务2:了解微服务架构任务3:了解大觅网架构设计任务4:了解大觅网项目管理设计任务1了解大觅网业务场景大觅网为大型票务类电商网站,为用户提供各类演出的购票、选座服务。本书以大觅网项目贯穿,对微服务架构相关技术进行讲解。大觅网主要包括如下功能。商品展示:用户通过大觅网官网,可以进行相关演出商品的查看,如图1.1所示。图1.1大觅网首页商品搜索:用户可以根据关键词、城市、商品分类、演出开始时间等条件进行搜索,商品搜索界面如图1.2所示。图1.2商品搜索界面用户注册登录:用户可以使用邮箱进行注册,并可以通过邮箱和密码进行登录。除此之外,大觅网还提供第三方登录(微信登录)功能,如图1.3所示。图1.3用户登录界面商品详情:用户可以查看演出的详细信息,并决定是否购买,如图1.4所示。图1.4商品详情页选座:决定购买商品后,用户可以在指定排期中选择座位,如图1.5所示。图1.5选座页选座成功后,用户可以继续下单。下单成功后,用户可以对订单进行支付。系统提供了支付宝和微信两种支付方式,如图1.6所示。图1.6支付页依据以上的业务分析,可以总结出大觅网的系统主业务流程如图1.7所示,登录流程如图1.8所示,注册流程如图1.9所示。图1.7系统主业务流程图图1.8登录流程图图1.9注册流程图任务2了解微服务架构1.2.1软件架构分类在如今的软件市场中,基于用户群体的不同,一般将软件行业分为两类,即传统软件行业和互联网软件行业。传统软件行业:面向企业开发应用软件,软件的最终使用者为企业内部员工。互联网软件行业:面向广大互联网市场开发软件,软件的最终使用者为互联网的所有用户。基于传统软件行业和互联网软件行业面向的用户群体的不同,二者在实际的开发、部署、运维等方面也有着很大的区别,具体如表1-1所示。传统软件开发一般会选择单体式架构,而新型互联网软件开发一般会选择时下较为流行的微服务架构。下面分别介绍两种架构。表1-1传统软件行业VS互联网软件行业1.单体式架构在传统的企业内部应用系统开发中,一般采用单体式架构。所谓单体式架构,即将项目的所有源代码都放置于一个总项目中进行开发、管理和部署。虽然项目分为多个模块,但多个模块的源码均属于一个项目,不同模块的开发者共同维护一份项目源码。单体式架构项目的源码结构如图1.10所示。随着信息技术的迅猛发展,互联网用户已成为软件市场的最大客户。不同于企业级用户,互联网用户拥有更多的选择空间,更加关注软件自身的用户体验度。对于软件提供商而言,一方面要保证软件响应的灵敏度,另一方面要保证软件功能的多样化、定制化。在这样的背景下,传统的单体式架构已不能满足互联网用户的复杂需求。主要原因如下。图1.10单体式架构项目源码结构(1)项目迭代不灵活对于互联网项目而言,互联网软件提供商经常会根据用户的不同体验需求,调整项目功能,即更新迭代软件版本。而单体式架构把项目代码合归一处,迭代的版本越多,项目代码就越多、越乱。在一个庞然大物中去寻找和修改指定模块的代码将非常困难,而且容易引发未知风险(如影响已上线功能)。(2)项目组职责、权限不清对于互联网项目而言,由于项目比较庞大,大多需要分不同的项目组进行开发。不同项目组之间需要进行严格的代码保密和权限划分,以避免核心代码泄露或错改其他项目组代码。而传统的单体式架构项目将所有的项目源码暴露给项目开发的所有成员,更容易引发风险。(3)项目并发配置不灵活对于互联网项目而言,由于面对的是互联网上的所有用户,所以在开发过程中,需要考虑项目在高并发下的处理能力。传统的单体式架构在解决高并发问题时,多采用集群方式横向扩展,即增加机器做负载均衡,如图1.11所示。每一个立方体代表一个项目的发布包(如war包),立方体中的每个小方格代表项目的一个模块。由于不同模块流量不一(如一次登录可以多次查询商品信息,因此用户模块的流量一般低于商品模块的流量),而单体式架构无法针对对应模块进行扩展,一些流量低的模块也不得不随着流量高的模块一起被扩展,这样就造成了资源的浪费。由于单体式架构存在上述问题,于是就出现了针对庞大项目进行拆分的微服务架构。图1.11单体式架构项目扩展2.微服务架构微服务架构是将原来庞大的项目进行拆分,拆分后的每一个模块独立形成一个新的项目(后称服务),服务之间可按照一定方式进行通信的架构,如图1.12所示。图1.12单体式架构项目VS微服务架构项目微服务架构的优势主要有如下几点。(1)项目复杂度降低微服务架构通过将巨大单体式应用分解为多个服务的方法解决了复杂性问题。在功能不变的情况下,应用可被分解为多个可管理的服务。每个服务都有一个用RPC或者消息驱动API定义清楚的边界,这就使得每一个项目的代码量大大减少,且关注的业务更为专一。(2)团队界限明确微服务架构使每个服务都由专门的开发团队来负责开发,不同的开发团队可以自由地选择开发技术,团队之间只需要定义好服务调用规则即可。由于服务都相对简单,使用最新技术重写原来项目的代码也变得更加容易。(3)部署灵活微服务架构使得每个服务都能够更方便地进行独立扩展,可以根据不同服务的特点采用不同的部署策略。两种架构的部署扩展方式如图1.13所示。在微服务应用开发中,分布式集群是最常见的架构部署方式。图1.13单体式架构项目VS微服务架构部署扩展知识扩展分布式架构就是按照业务功能,将一个完整的系统拆分成一个个独立的子系统,每个子系统称为“服务”。这些服务可以部署在不同的机器上,互相通过接口来进行通信。集群架构是一组相互独立的、通过高速网络互联的计算机,它们构成一个组,并以单一系统的模式加以管理。通俗地讲,就是由多个服务/机器一起做相同的事情,提供相同的服务,以此来提高系统的性能和扩展性。了解微服务架构更多内容请扫描二维码。1.2.2微服务架构概念微服务架构1.服务类型在微服务架构的项目中,至少要包含两类服务:Provider(提供者)和Coumer(消费者)。Provider即提供服务的一方,Coumer即调用服务的一方。在项目开发中,由于同一个项目既有可能是提供者也有可能是消费者,因此在项目拆分的过程中,为了防止项目的互相依赖(如用户模块需要调用商品模块的服务,商品模块也需要调用用户模块的服务),一般会将提供者和消费者单独拆分成独立的项目。大觅网项目的微服务拆分架构图如图1.14所示。图1.14微服务架构拆分图2.常见微服务架构(1)Duo/DuoxDuo是阿里巴巴公司开源的一个优秀的高性能服务框架。基于Duo可实现服务间高性能的RPC调用。在集成方式上,Duo可以和Srig框架进行无缝集成。Duox为其升级版,由当当网进行升级改良。(2)SrigCloudSrigCloud是基于SrigBoot的一整套实现微服务的框架,它提供了微服务开发所需的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等组件。本书将基于SrigCloud技术进行微服务架构开发实战。3.调用方式微服务架构项目之间一般有两种调用方式,即RPC和RESTful。(1)RPCRPC即RemoteProcedureCall(远程过程调用),通俗地讲,就是可以在一个项目中像调用本地服务一样去调用其他项目的服务。具体调用方式如示例所示,其中使用@DuoCoumer注解注入的Service即为其他项目中的服务。常见的微服务框架,如Duo及其升级版Duox均支持RPC的调用方式。示例@ComoetulicclaQgGoodServiceImlimlemetQgGoodService{@DuoCoumerrivateRcQgUerServicercQgUerService@DuoCoumerrivateRcQgGoodServicercQgGoodService@DuoCoumerrivateRcQgGoodMeageServicercQgGoodMeageService//省略部分代码}(2)RESTfulREST全称是RereetatioalStateTrafer,是一组架构约束条件和原则。狭义上,RESTful可理解为在We请求中,将参数封装于URL内部(如使用URL:www.dm.com/getUerIfo/12,获取用户ID为12的详细用户信息)。在微服务中,项目之间可以采用RESTful风格的HTTP方式互相进行调用。常见的微服务框架,如SrigCloud及Duox均支持RESTful的调用方式。4.微服务架构设计原则(1)围绕业务切分在决定将项目分成多少个子项目时,需要按照对应的业务进行拆分,避免业务过多交叉,接口实现复杂。比如打车应用可以拆分为三个子项目:乘客服务、车主服务、支付服务。三个服务的业务特点各不相同,支持独立维护,都可以再次按需扩展。(2)单一职责在服务设计上,每一个服务的职责尽可能单一。这样可以保证服务的模块化协作,即多个服务互相搭配完成一个整体功能。(3)谁创建,谁负责采用微服务架构对项目进行拆分后,出现了很多小的项目,这些项目需要单独部署。为了减少沟通成本,采用微服务架构的项目一般由其开发团队直接对项目的开发、维护、部署进行负责。任务3了解大觅网架构设计本任务采用微服务架构的设计原则,基于SrigCloud微服务技术对大觅网项目进行架构设计。下面主要从四个维度对系统架构进行描述,分别为业务架构、应用架构、技术架构和数据库架构。1.业务架构业务架构是用来描述系统主要业务功能的架构。一般来说,确定系统的业务架构只需要回答一个问题:用户使用系统可以干什么。大觅网的业务架构如图1.15所示,分为四类业务,分别为用户业务、商品业务、订单业务以及支付业务。用户通过大觅网可以完成对这四类业务的操作。图1.15业务架构图2.应用架构应用架构是用来描述系统应用结构的架构,通俗地讲,就是描述系统包含多少种类型的应用,以及应用之间关系的架构。大觅网的应用架构如图1.16所示。大觅网采用微服务架构对项目进行划分,划分后系统包含前端应用、网关应用、环境应用以及后端应用。其中,后端应用又可分为三类,分别为基础服务类应用、提供服务类应用、消费服务类应用。基础服务类应用包括本微服务架构的注册中心Eureka以及一些微服务管理类组件。提供服务类应用是微服务架构中的提供者,即提供接口供其他程序调用的程序。消费服务类应用就是调用提供者接口进而实现业务的程序,在微服务程序中称为消费者。一般,提供者应用包含数据库操作和简单业务逻辑操作,消费者应用包含复杂业务逻辑的处理和用于数据展示的数据封装。另外,大觅网项目依赖众多的第三方应用环境,如Redi、Jeki、Elaticearch、ELK等,通称为环境应用。图1.16应用架构图3.技术架构应用架构设计完成后,需要进一步考虑系统设计的细节。技术架构就是用来描述系统业务所采用的技术的架构。大觅网的技术架构如图1.17所示,说明如下。采用Docker环境进行项目环境搭建和配置。采用MySQL作为系统数据库并采用集群方式进行配置和部署。采用Mycat数据库中间件管理数据库集群。采用Elaticearch集群实现商品信息的存储和搜索。采用Redi作为缓存来缓存用户数据。采用SrigCloud微服务架构实现微服务管理,将系统应用拆分为提供者、消费者、网关及注册中心。采用SrigCloud整套解决方案,包括使用Fegi进行接口管理、使用Hytrix进行容错、使用Rio实现负载均衡。采用前后端分离技术,将数据的业务逻辑处理和展示分开,将数据展示独立为前端项目。前后端之间采用Ngix反向代理实现接口访问。采用Jeki实现程序的自动发版和CI(持续集成)。图1.17技术架构图4.数据库架构数据库架构即描述系统数据结构的架构。基于微服务设计思想对试读结束[说明:试读内容隐藏了图片]点击下载...

    2022-04-05 微服务架构开发 微服务架构技术

  • 前端架构设计(txt+pdf+epub+mobi电子书下载)|百度网盘下载

    作者:迈卡·高保特(MicahGodolt)出版社:人民邮电出版社格式:AZW3,DOCX,EPUB,MOBI,PDF,TXT前端架构设计试读:前言排版约定本书采用以下排版协议。●楷体表示新术语。●等宽字体(cotatwidth)变量、函数名、数据库、数据类型、环境变量、据库、数据类型、环境变量、句子和关键字。●加粗等宽字体(cotatwidthold)表示命令或其他文本应由用户输入。●等宽斜体(cotatwidthitalic)表示用户输入的值或根据上下文确定的值替换的文本。图标表示提示或建议。图标表示一般注释。图标表示警告或警告。本书适用于对象本书不是一本技术手册,虽然书中使用了大量的代码示例;它也不是一本纯理论图书,虽然讲“为什么这么做”的部分和讲“怎么做”的一样多。因此,本书既不适用于单纯寻求技术答案的开发者,也不适用于只想了解梗概信息的项目经理。这本书适用于那些想从更宏观的角度理解前端开发的从业者。我写这本书的目的是鼓励和鼓励开发人员承担前端架构师的责任,并努力把前端开发作为下一个项目的首要任务。这本书还写给那些有一定技术头脑,想了解当前快速变化的前端环境的管理者。本书涵盖了各种工具、标准和最佳实践,可以将项目前端开发水平提高到一个新的高度,并有力地论证了这一点。使用代码示例补充材料(代码示例、练习等)htt://githu.com/micahgodolt/frot-ed-architecture下载。这本书的目的是帮助你完成工作。一般来说,如果这本书提供了示例代码,你可以在你的程序或文档中使用它。除非你使用了很大一部分代码,否则你不需要联系我们获得许可证。例如,如果你用这本书的几个代码片段写一个程序,你不需要获得许可,销售或分发O'Reilly书中的示例光盘需要许可;引用本书中的示例代码回答问题不需要许可。在您的产品文档中放置大量代码需要许可。我们希望但不强迫您在引用本书时添加引用说明。引用说明一般包括标题、作者、出版社和ISBN。比如:“FrotedArchitectureforDeigSytemyMicahGodolt(O'Reilly).Coyright2016MicahGodolt,978-1-491-92678-9.”如果您认为您对示例代码的使用超出了上述许可范围,欢迎您通过ermiio@oreilly.com联系我们。SafariBookOlieSafariBookOlie(htt://www.afariookolie.com)数字图书馆应运而生。它以图书和视频的形式出版世界顶尖技术和商业作家的专业作品。技术专家、软件开发人员、We设计师、商务人士和创意专家将在进行研究、解决问题、学习和认证培训时进行SafariBookOlie被视为获取信息的首选渠道。组织团体、政府机构和个人,SafariBookOlie提供各种产品组合和灵活的定价策略。用户可以通过功能齐全的数据库检索系统访问O'ReillyMedia、PreticeHallProfeioal、Addio-WeleyProfeioal、MicrooftPre、Sam、Que、PeachitPre、FocalPre、CicoPre、JohWiley点击下载...

    2022-04-04 前端配置环境变量 前端的开发环境

  • 大话代码架构:项目实战版(txt+pdf+epub+mobi电子书下载)|百度网盘下载

    作者:田伟,郎小娇出版社:机械工业出版社格式:AZW3,DOCX,EPUB,MOBI,PDF,TXT大话代码架构:项目实战版试读:前言架构(Architecture)是什么?可能每个人给出的答案都不同。业界流行一句笑话:Architectureiliketeeageex,everyodytalkaoutit,oodyreallykowwhatiti.当然,MOL也不可能给出一个关于架构的准确定义。MOL更愿意把架构归为哲学的范畴。架构本身其实和软件开发并无太大关系。一个国家有自己的管理体系;一个公司有自己的组织架构;一个家庭也有独特的男权或女权的特色,小到一个人;也是可以分为自我、本我和超我的。每个事物都是由一个个更小的事物组合而成的,而这些其实都与架构相关。在宏观世界里,所有的国家公民构成了一个国家主体,国家主体对每个公民进行管理和约束,这是架构。在微观世界里,电子绕着原子核高速转动,始终不会脱离原子核的管辖范围。而原子核和电子又组成一个原子。原子对电子、质子、中子的管理就是架构。本书的读者一定是软件行业的高手或菜鸟,那我们就回到软件编程的世界里。每个软件项目都是由代码和服务器构成的,如何统筹安排代码和服务器,就是架构的范畴了。一个项目可能要使用多台服务器,如We服务器、数据库服务器、文件服务器、CDN……如何针对不同的要求对服务器进行选型,这是架构;如何统一管理这些服务器,这是架构;如何让这些服务器平稳运行,这也是架构。开发项目使用什么语言,是Java还是Node.j?选用什么数据库,是Oracle还是MogoDB?这是架构。具体到开发过程中,某个模块应该如何安排,是交给DBA(数据库管理员)用存储过程来实现,还是让C#程序员访问数据库实现?这是架构。在写C#代码的时候,采用三层架构,还是MVC?这是架构。如何写日志,是使用I/O读写文件?还是采用log4et?或者是AOP切片写日志?这是架构。甚至具体到某种技术的时候,也有架构。比如MOL规定项目要使用MVC架构,那么使用微软的MVC,还是Srig的MVC?这都是架构。可见,架构涉及的范围非常之广。弱水三千,MOL只给一瓢。本书将从代码架构的角度来让大家一窥架构的真面目。C#是一门非常优雅的编程语言(当然MOL并无编程语言的偏见),所以本书中所有的代码都以C#语言来描述。本书特色1.风趣幽默MOL一直比较反对平铺直叙的讲解方式,所以本书的语言风格是比较幽默的。在本书的内容中将出现3个与MOL并肩作战的兄弟(公司老大邓总不在此列),以对话形式抛出问题并解决问题。2.案例分析本书中只有一个项目“晋商卡”,但MOL会带着大家见证“晋商卡”从无到有的过程,大家可以在这个过程中获得很多意想不到的收获。3.向循规蹈矩说NO正如MOL在结语中所说,2017年是一个强调“工匠精神”的一年。几乎所有的人都在精益求精地做自己的事情。但MOL要分享给大家的是一种懒人精神,我们不愿意日复一日地重复昨天的自己,我们要站在更高的层面,做更少的事情,却有更多的收获。本书内容及体系结构第1篇需求与三层架构(第1~3章)本篇详细介绍了项目开发的前置节点——需求,并对常见的三层架构给出了分析。在第1篇中提出了面向对象的重点概念,并让大家初步认识抽象的过程。相信很多人一定被书中大段的SQL代码搞得云里雾里,不用担心,在第3章中MOL将带领大家完成懒人的第一步——如何不写SQL代码。第2篇NoSQL和测试(第4、5章)NoSQL是现在比较流行的一个话题和技术。在第4章中将通过讲解MogoDB来介绍NoSQL如何使用,并且纠正大家的一个错误观念:NoSQL和ORM不能搭配使用。第5章分享了测试的工作,并讲解了单元测试、黑盒测试、白盒测试……让大家在收获的同时,也能理解测试工程师在工作中所要面临的一些痛苦。第3篇高精尖技术(第6~9章)任何一个网站项目,似乎都绕不开“缓存”这个神奇的空间。缓存用得好,可以加快系统的反应速度。如果缓存用得不好,不仅用户体验差,还可能造成服务器宕机。第6章就分享了如何使用缓存。每个程序员都有一个全栈的梦想,而前端又是全栈中必不可少的一部分,第7章讲解了如何使用EayUI来搭建前端。现在越来越多的电商网站都会做一些抢购或促销活动,当然这就使得网站不可避免地面临高并发。如何处理高并发呢?第8章将通过讲解消息队列,来说明如何应对高并发。微信已经成了人们生活中必不可少的一部分。在2017年3月27日这一天,微信小程序也对个人用户开放了。我们如何把“晋商卡”挂到微信公众平台上,又如何开发微信小程序呢?这些问题都将在第9章中解决。本书读者对象·对代码架构感兴趣的初学者;·对代码架构感兴趣的爱好者;·高校学生和相关培训学校的学员;·初入职场需要提高开发水平的开发人员。因为书中所有的代码都以C#语言来描述,所以本书读者如果有一定的C#语言基础更佳。本书配套资源及获取方式为了方便读者高效地学习,本书特意提供了以下配套资源:·本书源代码文件;·本书涉及的一些开发工具的安装包。这些配套资源需要读者自行下载。请读者登录机械工业出版社华章公司的网站www.hzook.com,然后搜索到本书页面,按照页面上的说明进行下载。本书作者本书主要由田伟(就是笔者MOL)和郎小娇主笔编写。其他参与编写的人员还有李小妹、周晨、桂凤林等。读者阅读本书时若有疑问,可以发邮件到hzook2017@163.com以获得帮助。引言我叫MOL,如果你是MOL的读者,那么一定知道“摩丝”了。MOL者,“摩尔”也。摩丝者,MOL的粉丝也。MOL在本书里将带领大家一起做一个属于自己的代码架构。代码架构架构是一样的吗?且看MOL如何分解。一谈到架构(Architecture),大家一定会觉得它是一个非常“高大上”的东西,当然,大部分人都是这样宣传的。为了让大家有一个更好的感性认识(因为本书并不是讲架构的,所以只要有感性认识就可以了),MOL决定用一个简单的例子来告诉大家什么是架构。一个架构师的例子在2015年的时候,MOL主导了一个B2C(Buie-To-Cutomer,商家对客户)网站,MOL在这个项目里面充当了非常多的角色,如产品经理、项目经理、架构师、DBA(数据库管理员)、程序员、QA(质量管理员)、Teter(测试员)……现在来看一下MOL作为架构师时所做的事情。MOL作为架构师,是以大体需求为前提的,也就是说,我们在这里不去讲如何获取需求,因为这不是架构师份内的事。当MOL拿到需求以后,就可以进行架构了。架构大体上分为两部分:硬架构和软架构(这并不是标准的叫法,只是想让大家更好地理解架构)。1.硬架构顾名思义,硬架构就是关于硬件的架构。MOL根据目标用户量和业务要求,采购了3台服务器,分别作为文件服务器、数据库服务器和We服务器(同时兼任缓存服务器),同时,建议用户在客户量增加到一定数量级以后,增加CDN(CotetDeliveryNetwork,内容分发网络)服务器,以加快访问速度。OK,架构师的输出已经完成了。但大家以为架构师就买几台服务器就完事儿了吗?那就大错特错了。在买服务器的背后,MOL对需求进行了研究,分析了网站需要承担的平均访问量和网站的业务内容。这个网站的访问量并没有大到令人发指的地步,所以我们暂时不用考虑硬件负载均衡的问题,只需要提供一台We服务器就可以了。这台We服务器需要处理用户发来的请求并做出响应给用户。为了提高We服务器的性能,我们将会在这台We服务器上安装虚拟机,并用Ngix(一个HTTP服务器,类似于IIS)做软负载均衡。由于本系统中需要保存大量的用户文件,如果把这些文件都放在We服务器上,那会给软件负载均衡产生额外的负担,并且大量的文件很容易把一台服务器“撑爆”。所以,我们用一台服务器专门来保存文件信息,这台服务器就叫文件服务器。数据库是一个项目中必不可少的一部分,数据库的本质其实就是文件和内容的组合,所以数据库的空间增长也是不可小觑的。而且数据库的操作,将会耗费大量宝贵的CPU和内存资源。所以我们将数据库专门放在一台服务器上,这台服务器就叫数据库服务器。好,硬件资源采购完成了,我们要把它们组合到一起。We服务器向网络公开,让用户可以访问,而文件服务器和数据库服务器只在局域网中,并不对外公开,这样可以在一定程序上保证安全性,而且也为客户节省了费用。We服务器可以访问文件服务器和数据库服务器。其实硬架构是非常复杂的,但本书不是主要讲硬架构,所以这里讲得非常简单,有兴趣的读者可以自行找“某度”或“某狗”进行搜索。2.软架构本系统将采用.NET平台下的C#语言进行开发,采用SQLServer数据库,使用微软的Cache缓存配合Redi来做。前台将以3种终端展示,分别是PC、手机、平板。所以前端将会使用HTML5来做。Adroid手机APP使用Java语言来开发,iOS平台上的APP暂时不做。同样的,软架构也只是让大家看到了输出,并没有讲为什么这样做,因为这也不是本书的重点。上面粗略地讲了一下什么是架构。下面来具体看一下代码架构。废话不多说,直接来看图1和图2。图1正常的代码架构图2不普通、非文艺的代码架构图1是一个常见的代码架构,而图2可能是新手程序员最喜欢的“代码结构”。代码架构的目的是让不同的代码块去干不同的事,最后再把这些代码块整合在一起,组成一个项目。这是本书要讲的内容。可以看到,代码架构和软件架构基本上不属于同一个层次的元素。但不可否认的是,代码架构是一个程序员应该具备的技能,也是通往架构师的必经之路。PS:各位读者可能对用户和客户这两个概念理解有误,这里统一一下,用户(Uer)是指使用系统的人,客户(Cutomer)是指要求我们做这个系统并且支付开发费用的人。背景及人物介绍本书中,我们将延续MOL活泼幽默的风格。为了剧情的需要,书中将会出现5位主人公。MOL:姑且称之为老鸟吧,从事代码工作多年,在公司中主要负责项目管理和代码架构。邓总:公司老大,身材消瘦如马云,有一双深邃的眼睛。虽然是公司的老大,但在本书中出现的次数并不多。刘朋:新入职员工,因为名字中的“朋”字“占地”面积很大,所以大家一般都会把“朋”字分开来念,所以他有另一个名字“月月”,性格比较幽默。岳鹏辉:新入职员工,长得比较帅气(已有女朋友)。李冲冲:新入职员工,打得一手好乒乓球。这几位主人公将会在本书中出现,他们可能是说相声的,可能是打酱油的,也可能是回家跪搓衣板的。但是他们更重要的作用是构造一个个生动的故事,在这些故事里面,大家可以看到一个真正的项目是如何搭建的。故事来源于生活,却不高于生活,这里的人是真实的,故事是真实的,当然,最重要的是,项目是真实的,知识也是真实的。MOL尽量用最接地气的语言,最平实的故事,来讲述一个个“高大上”的知识和技术。我们的目标我们经常会听到这样的话:“加班不是目的,目的是不加班”。这样的话让人无比窝火,但又无比正确。我们还会听到这样的话:“我这样严厉地要求你,是为了让你成长得更快”。你有理由反驳吗?其实,换一种方式,我们可以快乐地成长。这也是MOL带团队的宗旨,也是本书的目的。MOL要让你快乐地看完这本书,最后发出的感慨一定是:“代码架构其实挺简单!”好了,我们要开始了!第1篇需求与三层架构·第1章故事从一个电商网站开始·第2章为什么是三层·第3章ORM实体关系映射第1章故事从一个电商网站开始按照惯例,一本书的开始一般会介绍一些基础知识,如Java语法、XML结构等。相信很多读者都立志做一名“高大上”的Coder,但是一看这种开篇讲语法的书就先泄气了。为了不让大家泄气,我们将使用一个电商网站项目来作为开篇。说到项目,大家一定会想到某培训机构的机票管理系统、通讯录……估计大家都要被这些标题党搞疯了。这些听起来很好听的系统,不一定有什么实用价值。但是我们要介绍的项目,是一个实打实的、已上线的、微信上可查找的一个项目。如果各位摩丝在任何时候觉得学习有点累了,或者迷茫了,可以上微信搜索“川商卡”,这就是我们要讲的系统。MOL在做这个系统的时候,用到的技术并不多,像缓存、消息队列等这些技术在项目中没有出现,但在本书中MOL也会讲到。MOL可以很负责任地说,当大家学完这本书后,可以毫不费力地给自己快速搭建一个“高大上”的代码框架。下面的内容,将是一些非常杂乱的、与代码看似无关的基础知识,请大家耐心看完。1.1需求?需求!相信大家对一些翻译软件的使用已达到炉火纯青的地步了,如果把“需求”这个词输入翻译软件,会出来一大堆对应的英文单词。这里只挑两个容易混淆的单词来说,即Requet和Demad。通常出现需求的地方,一般都会用Demad来描述,但是偶尔也会看到Requet。这两个单词都是需求的意思,有啥区别嘞?Demad是必须要完成的,没有商量的余地。比如你的BOSS告诉你:我们的项目要加入某宝支付的功能。这就是Demad。虽然过两天BOSS有可能把这个功能“砍掉”,但是令行禁止,你还是必须得把某宝支付的功能实现。Requet是锦上添花的功能。比如你的BOSS是一位单身宅男,他问你:在网站某个页面的右下角加入一个美女的图片,可以吗?这就是Requet,它表示请求。也就是说,你不加这个图片,项目照样运行。至于这个图片是否要加,那就看你的心情喽。下面,我们来描述一下本书中的项目需求。由于本书中的项目采用的是敏捷开发,所以开发过程中的文档特别少(关键文档是不可以省略的)。这里不可能列出所有的需求文档内容,因此将使用BraiStorm(头脑风暴)的方式来描述需求:·这是一个电商网站;·这是一个O2O电商网站;·这个网站有登录注册功能;·这个网站有商品展示功能;·这个网站有订单功能;·这个网站有支付功能;·这个网站有积分功能。OK,需求就是这么多。估计很多小伙伴都已经开始吐槽了吧:上面的描述也能算需求吗?MOL可以很负责地告诉你,是的,而且这是沟通4个小时后的成果,你相信吗?好了,先不吐槽需求发起人了。上面的7个功能,就是我们这本书里要实现的需求。好像这也没什么难点啊。但如果你这样想就错了。至于哪里错了,MOL不会做直接回答,在后面的每个章节中,都会对这个问题进行回答,请大家自行品悟。如果你想要了解详细的需求,那可能要失望了,因为MOL并不打算在这里描述一个完整的需求,而且这并不是实际开发中的情况。在敏捷开发的项目里,一般都是到开发的最后阶段,才能明白客户想要的是什么东西。这里引用一幅项目开发领域流传很广的漫画来说明,如图1-1所示。图1-1项目开发漫画1.2敏捷开发简介前面提到了敏捷开发,听起来是一个非常“高大上”的名词。下面让我们来看一下敏捷开发的真面目。敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。(引自百度百科)如果专业的解释看不太懂,没关系。我们用简单的语言来描述敏捷开发的过程。小明想买一部手机,他告诉手机厂家:我想要一部手机,这部手机要好看、好用。厂家收到需求以后,肯定是一头雾水,一定在想,我们做的每一部手机都非常好用呀,此时的心情是崩溃的。但是本着顾客是上帝的原则,厂家开始做这部好看且好用的手机。首先,他们把手机壳做了出来,打电话把小明叫到工厂:小明,手机壳做好了,你看是否符合你的需求?小明看完以后,无非就两种回答,符合或不符合。如果符合,那么厂家将继续研发手机屏幕。如果不符合,那么将根据小明的需求继续修改。又过了几天,厂家打电话:小明,屏幕做好了,你看是否符合你的需求?……终于,在一个阳光明媚的下午,小明交完钱,拿到了自己心仪的手机,留下孤寂的厂家负责人在风中凌乱:就一个诺基亚1020,至于让我们这么费劲吗。这就是一个敏捷开发的表现形式,它最明显的特点就是小迭代,每个小功能都去找客户确认,最后完成产品的同时,也就知道了客户的具体需求。这样描述敏捷开发肯定是不全面的,我们的目的是不给出一个敏捷开发的准确定义,只是想让大家对敏捷开发有一个感性认识。敏捷开发越来越多地被很多开发团体利用。它的好处就是开发周期短、与客户交流密切,一旦有问题出现,能很快做出响应。在敏捷开发的团队里,逐渐地出现了一种人——“全栈工程师”,这种人的优势在于:他们是无所不知的。你说前端,他能给你讲HTML5和CSS3;你说C#,他能和你探讨.NET框架;你说Java,他能和你研究JVM;你说大数据,他还对Hadoo的理解有独到之处,仿佛是无所不能。相信很多摩丝都有一个“全栈梦”,加油!1.3UI——用户界面UI(UerIterface,用户界面),这是一个可大可小的概念。往小了说,它就是一个图形界面,如网页、桌面窗口、手机窗口……只要是你看见的,都可以算是UI;往大了说,UI包括产品经理、用户体验工程师、美工(静态切图PS)、前端(HTML、CSS)、前端交互(JavaScrit、jQuery、EayUI)……1.3.1从UE说起UE是一个容易让人产生歧意的缩写。经常写代码的人,尤其是写脚本语言(如PHP、Pytho)的程序员一定会说,UE是一个文本编辑器“UltraEdit”;经常写需求的人一定会说,UE是用户体验“UerExeriece”。这里所讲的UE是用户体验。那么用户体验是什么?先来摘录百度百科对它的解释:用户体验(UerExeriece,简称UX或UE)是一种纯主观的在用户使用一个产品(服务)的过程中建立起来的心理感受。由于它是纯主观的,因此就带有一定的不确定因素。个体差异也决定了每个用户的真实体验是无法通过其他途径来完全模拟或再现的。但是对于一个界定明确的用户群体来讲,其用户体验的共性是能够经由良好设计的实验来认识到的。随着计算机技术和互联网的发展,使技术创新形态正在发生转变,以用户为中心和以人为本的理念越来越被重视,用户体验也因此被称做创新2.0模式的精髓。相信很多小伙伴都不愿意看这样长篇大论式的定义,那么我们用大白话来描述一下什么是UE。微信做得好,大家都愿意用它来社交;支付宝做得好,大家都愿意用它来支付;百度做得好,大家都愿意用它来搜索。当然,也有一些网站或项目做得就比较一般了,上线以后导致用户骂声连天。“做得好”和“做得一般”表明用户心里是有一杆秤的,这杆秤就用来衡量这些产品是否符合用户的需求和使用习惯。这杆“秤”就是用户体验。一千个人眼里就会有一千个哈姆雷特,也就是说,任何一款产品,都不可能百分之百地满足任何用户。就像对于一朵菊花来说,有人觉得它芳香四溢,也有人觉得它臭,就是这个道理。综述,一个产品,只要满足了大多数用户的需求,就是一个好的产品。1.3.2HTML5amCSS3不得不说,HTML5和CSS3的发展正如日中天。HTML5强大到可以完成手机APP的功能,如拍照、读取手机文件。CSS3较之前面的版本,有更方便、更强大的渲染功能。当然,MOL并不是一个合格的前端工程师,所以这里对这些前端技术的描述只能点到为止。对于这些技术的运用,也不是后台程序员擅长的,我们更愿意把这些繁杂的前端工作交给专业的前端人员来做,因为他们一定比MOL有着更为专业的前端功底。如果你的团队里正好没有前端人员,而你的BOSS又把前端的任务交给你了,怎么办?别着急,在后面的章节中,MOL会告诉你如何应对这些不合理的要求。1.3.3微信相信各位小伙伴的手机上一定会装微信APP,微信以其极大的用户群体为基础,打造了一个互联网的社交平台。在这个平台上,有人“晒”幸福、有人吐槽春晚、有人发“鸡汤”、有人抢红包、有人卖面膜……当然,这些用法都有点Low了。对于我们这些Coder来说,更愿意看到自己做的东西挂在微信上面!本书中讲到的“川商卡”这个项目就是搭载在微信公众平台上面的。当然,你还可以开发微信公众服务号来展示自己的成果,这些都是后话。之所以把微信公众号这个平台放在UI里面,是因为越来越多的电商网站愿意以手机为载体来实现用户流量的引入。如果商家自己去做推广的话,将是一笔不小的开支,所以商家更愿意使用已成型的平台来推广自己的产品,而微信公众号无疑是一个不错的选择。比如我们用的信用卡公众号,或者订阅了某个公众号,这些都属于微信推广的一种手段。微信作为一个平台,有一套自己的规范,也就限制了网站的展现形式,所以从这个角度来说,微信也算是UI的一份子。1.4数据库别问我数据库是什么。MOL说过,这本书里不讲基础知识。在这里讲的是如何去设计数据库。MOL相信很多大学老师一定是这样教学的:设计数据库一定要先设计数据字典,这个字典看起来像这样,如表1-1所示。表1-1登录信息的数据字典这个字典描述了一个用户登录信息表。设计好这个字典以后,再去数据库(SQLServer\Oracle\MySQL……)中去实现这个字典,实现的方法无非就是SQL语句createtale,或者用图形化工具去设计表。大家有没有觉得这个字典设计得有点鸡肋?如果要改需求,比如加入注册时间这个字段,试问,你会先修改字典,然后再去修改数据库吗?如果需求更改得比较频繁,那么你一定会厌烦“数据字典”这个东西的。其实不然,数据字典是一个神器,只是你的打开方式不对。1.4.1PowerDeiger设计工具面向对象是本书的一条主线,本书中对面向对象的表述甚至有些“极端”,但是一定可以把OO(面向对象)思想灌输给大家的。面向对象里说,一切皆对象。也就是说,数据库是对象,数据库中的表也是对象。因此,我们将以对象的形式来描述一个数据库表,这个描述将以用户登录信息来举例。在数据库里,对“对象”的体现莫过于“属性”,属性是什么?说白了,属性就是字段。怎么理解?一个登录对象,必然有用户名和密码,这是它的属性。那么反映到数据库中,就是用户名字段和密码字段,这样就理解了吧。为了让一个数据字典看起来更像是一个对象,我们将借助PowerDeiger(以下简称PD)工具来设计。如果不会用PD,请自行去“某度”或“某狗”去搜索一下。下面先来做一个概念模型CDM(CocetDataModel),如图1-2所示。这样看是不是有点对象的意思了?有对象名,有对象属性。那为什么建立的是CDM而不是物理模型PDM(PhyicalDataModel)?先不着急来回答这个问题,先把建立的CDM生成PDM,然后进行对比。生成的PDM如图1-3所示。图1-2登录信息的概念模型图1-3登录信息的物理模型看起来二者好像没什么区别,那么下面再建立一个用户订单的对象。我们知道,一个用户可以有0个或多个订单,那么用户am订单的CDM看起来像下面这样,如图1-4所示。它生成的PDM如图1-5所示。到这一步,就看出二者的区别了吧。PDM的描述更接近于数据库,因为可以从PDM中清晰地看到关于外键等数据库表的描述;而CDM更接近于需求,我们只需要关心一个用户有多个订单就可以了,至于外键之类,不是CDM要关心的问题。在设计数据库的时候,一定是从需求出发,所以设计CDM会更贴近需求,也会更容易一些。图1-4多表间关系的概念模型图1-5多表间关系物理模型OK,我们再回到数据字典的问题,为什么要用PD来画一个CDM,而不是用Excel之类的软件来做一个数据字典的表格?用PD做数据库设计的好处有很多,这里只列举两点:·便于管理。当有很多项目的数据库需要管理的时候,可以很轻松地从PD里面找到想要维护的表。·便于生成数据库。我们建立的CDM可以生成PDM,PDM又可以生成数据库脚本,这些脚本是可以直接在数据库中执行的。当然,如果为PD设置了ODBC(OeDataaeCoectivity)连接,则可以直接在PD里通过操作数据库来生成表。以上两点好处,足以让我们选择PD来设计和维护数据库了。1.4.2关于SQL语句相信很多新手程序员都喜欢用大量的SQL语句来实现一个又一个复杂的功能,而且非常有成就感。但本书不会教你怎样写SQL语句,而且会劝大家尽量少写SQL语句。为什么呢?很简单,我们要面向对象!一个复杂的SQL语句是很难体现对象特性的。那么如何保证尽量少地去写SQL语句呢?这是第3章的内容,这里先不做介绍。少写SQL语句,并不是不写SQL语句。那么哪些地方需要写SQL呢?答案是存储过程、事务、触发器。可以看出来,这里列举了存储过程、事务、触发器这3种SQL语句的出现形式,它们有一个共同点,就是业务规则是相对固定的。比如,新用户注册完成以后,数据库要悄悄地给这个用户添加一个购物车,这种业务场景最好使用触发器。关于触发器的优势,这里也不会细说,MOL只会轻轻地告诉你,触发器比你写代码提交快很多。既然项目中出现了SQL语句,那么就需要对这些SQL语句进行分析,看它们的执行效率是否符合要求。比如一个elect语句要执行10分钟,那么这个SQL语句就得“枪毙”重写了。通常,看一个SQL语句的执行效率,主要集中在全表扫描和索引上面,尽量不使用全表扫描,尽量使用索引,目的都是让SQL执行起来更快一些。关于数据库,要说的最后一点是主键的问题。主键的类型有多种多样,可以使用数字、字母、时间等,只要保证它是唯一的就可以了。那么我们到底应该取用什么类型呢?一些专家一定会说:看情况而定。MOL当然不会这么说。建议大家使用GUID类型。使用GUID类型的好处就是:它的长度是固定的,而且永远都不会重复。如果使用it类型,虽然可以很轻松地使用主键自增保证它是唯一的,但当它增长到一定数量的时候,it已经不足以描述了。MOL曾经经历过一件事,彩票奖池金额在2016年元月的时候已经到达2.4亿多,这个数字是无法用it来描述的,所以把程序中所有用it描述主键的地方都改成了log。其他的数据类型都有自己的缺陷,所以使用GUID来作为主键字段的数据类型。当然,GUID也有自己的缺陷,如不直观、没有数据含义等。但这些功能其实都可以解决和避免,所以为了简单和实用,我们使用GUID作为主键字段的数据类型。可以看到,MOL说建议GUID这件事情时说了3遍,正所谓重要的事情说3遍嘛。前端和数据库都描述完了,最重要的代码就要登场了,你以为代码就是一堆C#关键词的集合?我就只能“呵呵”了。那么我们应该如何去组织代码呢?面对频繁的数据库操作,要如何尽量少地写SQL语句呢(在本书的项目中,C#代码中是不掺杂任何SQL语句的)?大量的SQL查询是否会影响网站速度?……这些疑问,将在后面的章节中一一解答。第2章为什么是三层还记得在引言中提到的几位主人公吗?从这一章开始,他们就要粉墨登场了!“三层架构”这个词一定是新手程序员经常听到的,大家听起来一定觉得它有点“高大上”的感觉,然后纷纷把自己的项目进行分层,以求变成三层。那么,三层架构到底是什么?为什么要分三层?我们慢慢说来。2.1MOL带兄弟们去吃饭时维九月,岁属三秋,这是一个阳光明媚的金秋,MOL所在的公司又新招了三位同学,MOL总算不是孤军奋战了,于是MOL带大家去了楼下一家餐厅吃饭。吃饭不是目的,这是给大家上的第一堂课。到了餐厅以后,一个很水灵的妹子迎上前来,问道:“几位帅哥要饭吗?”MOL当时就不高兴了,回道:“你看我们长得像丐帮的吗?”妹子脸一红:“我的意思是,各位想吃点什么?”这时,月月搭腔了:“蒸羊羔、蒸熊掌、蒸鹿尾儿、烧花鸭、烧……”妹子赶紧打住:“哥哥,我得问一下厨房师傅,看看能不能做。”不大一会儿,妹子出来了:“实在对不住,您几位刚才点的那些,我们这里都做不了,因为这里是西餐厅。”月月:“那二尺长的龙虾有吗?”妹子:“二尺长的没有,有二尺七的,要吗?”MOL一看不对劲,这是要把我吃到破产的节奏啊,赶紧说:“二尺长的龙虾都没有,那就来小龙虾吧。”妹子:“小龙虾暂时没有,如果您可以等的话,等采购师傅回来了,就有了。”MOL:“可以等,不就几分钟嘛。”妹子愤愤地下去了,月月也一脸不满意,MOL赶紧打圆场:“不就是龙虾嘛,大小都是龙虾,小怎么啦?小就不能满足你了?”然后是等待吃饭……吃完饭回到公司,MOL招集大家开会。MOL:“今天这顿饭不能白吃,它将开始我给你们的第一课——三层架构。”月月:“吃饭都能扯上架构,神了嘿。”鹏辉:“今天的饭吃得确实有点意思,不过还能和程序扯上关系就有点意思了。”MOL:“我们刚才在餐厅吃饭的时候,总共有这么4个角色,分别是我们3个“饭桶”、服务员、大厨和采购师傅。”(下面都是MOL口述,将不再以引号来包含)在程序员的世界里,这几个角色分别对应的关系是:·我们3个“饭桶”对应用户,因为我们是花钱享受服务的。·服务员是UI(UerIterface用户接口)层,她是要展示给用户,并且和用户进行交互的,而且她还要和大厨进行交互。·大厨是BLL(BuieLogicLayer业务逻辑层),他的任务是把食材加工成美食,并交给服务员,所以他既要和采购师傅交互,又要和服务员交互。·采购师傅是DAL(DataAcceLayer数据访问层),它的任务是把食材采购回来并交给大厨。除此之外,还有一个隐形的角色是菜市场的大妈,她负责把菜卖给采购师傅。她对应我们软件系统中的数据库。当然,我们对大妈是不感兴趣的,所以这里先不说大妈的事。OK,根据上面的描述,我们可以把一个餐厅里的工作分成3个部分,分别是服务员、大厨和采购师傅,他们之间的相互关系如图2-1所示。图2-1餐厅分工大家有没有想过,如果我雇佣一个人,这个人既会炒菜又能采购,还会当服务员,那么这些角色不就不用分开了吗?非常好,我们假设有这样一个人存在,他既要当服务员与食客沟通,还要炒菜,还要去买菜,那么将会发生什么情况呢?这个人先要恭敬地问食客“您来点什么?”,然后再跑到厨房换上工作服开始炒菜,如果发现没菜了还得自己去买菜。我相信,即使有这样一个人存在,那么他也会累得够呛。而且他炒菜或者采购的时候,是不能与其他的食客沟通的。最后他累得实在不行了,辞职走人了,老板就哭了,因为他一走,餐厅就没人干活了,餐厅也得关门。所以,分开服务员、大厨、采购员这几个角色,有利于每个角色都专注于自己的职责任务,而且,即使有人搁挑子不干了,那也只需要找一个对应职责的工人来顶上就可以了,不至于让整个餐厅都变得很被动。好了,说完了餐厅的分工,再来说一下我们所关心的代码中的三层架构。通常意义上来说,三层架构是UI、BLL、DAL这3层。这3层可以对应到餐厅中的3个角色来对比理解。UI层负责与用户交互,并将用户的请求交给BLL层处理;BLL层负责从UI层获取请求并将处理后的数据交给UI层,同时它还向DAL层发送请求,并获取DAL层返回的数据;DAL层负责接收BLL层的请求,并进行数据处理然后返回给BLL层,在大多数情况下,DAL还需要从数据库中获取数据。它们之间的关系如图2-2所示。图2-2程序中的三层结构同样的,我们完全可以不使用三层结构就可以完成一个项目,这种代码结构最常见于新手程序员写的代码。这样的结构将会面临很大的风险,如果业务逻辑变动,那么将会出现“牵一发而动全身”的现象,由此不得不对整个项目进行修改。所以,分层可以让专业的层(Layer)去做专业的事情,如果逻辑有变动,那么只需要修改相应的层就可以了。PS:餐厅吃饭的例子非常经典,它将贯穿于本书中的章节,在后面的章节中经常会说到“如果餐厅中的大厨有个助手……”,希望大家能立刻回想起MOL在这一节给大家讲的餐厅吃饭的例子。2.2动手写一个三层结构说了这么多,都只是停留在概念的层次,接下来,我们要写一个简单的三层结构的框架。这个框架只需要实现一个功能:用户输入两个数,并选择运算方法,运算只包括+、-、*、/。程序通过计算,将计算结果输出到用户界面上。OK,需求已经非常明确了,就是要做一个简单的能进行加、减、乘、除运算的计算器。那么前端可以使用任何方式,比如控制台、WiForm、WeForm、MVC……为了直观和简单,这里将采用WeForm来做为前台界面。而BLL主要是将数据逻辑进行处理,并调用DAL层计算结果,将得到的结果返回给界面。DAL只需要提供数据就OK了。在本例中,不考虑边界异常(如太长的数字会溢出等情况)。首先需要把项目的框架搭建好。新建一个名为Mol.Calc的解决方案,并加入一个We项目(Mol.Calc.Portal)和两个类库项目(Mol.Calc.Bll和Mol.Calc.Dal),如图2-3所示。图2-3三层代码框架PS:项目的命名一定要规范,一般来说,项目命名都是“公司.项目.模块名”。MOL所使用的开发环境是Widow7+ViualStudio2015+SQLServer2012。关于环境的配置这里不会多说,否则显得本书很low,大家也会很不耐烦。2.2.1DAL层的实现有了项目框架以后,就可以写代码了。首先需要一个处理数据的功能,这个功能大家一定要记住,和数据打交道的功能,最好放在DAL里。在本例中,DAL层只需要处理加、减、乘、除4种运算就可以了。所以我们分别写4个函数来实现这4种运算,如图2-4所示。图2-4四则运算的实现在本例中,加、减、乘、除这4种运算确实是太简单了,用它来占用一层有点浪费,不过在大项目中,这样写是非常有必要的。2.2.2BLL层的实现接下来要实现BLL层。BLL层是三层里最难学的一层,因为大部分的BLL中的代码都是这样的://实例化一个DAL对象oeratedal=ewMol.Calc.Dal.oerate()//调用DAL计算加法1+2dal.Add(1,2)这样的代码看起来毫无生气,甚至没有存在的意义,因为DAL层就可以把计算做完了,为什么还要硬生生地加一个BLL层呢?大家一定要记住,我们不是为了分层而分层,而是为了实现高效可维护的代码结构。BLL层的作用是要处理业务逻辑,所谓的业务逻辑就是要判断UI层传入的数据应该如何排列组合提交给DAL层,如果有不合法的数据,就要及时中断,不向DAL层提交。本例中,需要判断用户选择的是哪种运算,并去调用DAL层中相应的运算;除此之外,还要判断:当用户要计算除法时,用户输入的除数是否为0。BLL层的代码如图2-5所示。图2-5BLL层代码注意:其实除数不能为0这样的验证应该放到前台UI层去验证,这里把它放到BLL层里,是为了强化大家对BLL层的理解。2.2.3UI层的实现前面的2.21节和2.22节,我们实现了数据的获取和处理。接下来就要写前台UI的代码了。UI代码比较简单,就是新建一个WeForm页面,名称为Calc.ax,并在这个WeForm页面中加入两个文本框、一个下拉列表框(设置下拉列表框选项为+、-、*、/)、一个按钮、和一个显示计算结果的Lael。UI后台,只需要实例化一个BLL层对象,并调用BLL层的方法既可。前台界面如图2-6所示。图2-6UI界面UI后台的代码如图2-7所示。图2-7UI后台代码这样,一个简单的三层代码结构的示例就完成了,运行结果如图2-8所示。图2-8程序运行结果2.3简说MVC提到三层架构,很多人就会想到MVC(ModelViewCotroller,模型-视图-控制器)模型。MVC的结构如图2-9所示。图2-9MVC模型示意图图2-9描述了一个MVC框架处理用户请求的流程。(1)用户发起请求,请求将被送给Cotroller。(2)Cotroller去Model中取数据。(3)Model返回数据给Cotroller。(4)Cotroller将数据返回给View。(5)View展示给用户。如果这个流程让你觉得难以理解,不要担心,因为我们还没有开始写MVC的代码,所以我们无法理解用户请求为什么是到控制器(Cotroller)而不是到视图界面(View),最后返回的时候不通过控制器返回,而通过视图来返回……大家只需要对MVC有一个感性认识即可,知道每一部分是干什么用的就OK了。2.3.1纠正一下老师的说法很多老师在讲到MVC的时候,都会和三层架构进行对比,并且会给出下面一幅图(如图2-10所示)。图2-10很多老师都会这样画老师画完这个图以后,告诉大家:MVC中的View和Cotroller相当于三层架构中的UI层。而MVC中的Model相当于三层架构中的BLL。每当听到这样的解释时,MOL特别想问问老师:你把DAL层吃了?当然,这样的做法有点激进。但是,老师这样的讲法肯定是不对的。三层架构是一种思维,MVC是另一种思维,如果非要把二者放在一起对比的话,难免牵强。接下来,我们来写一个MVC的程序,看看MVC到底是什么样子的。2.3.2MVC的第一个程序前面提到过,MVC只是一种设计思想和程序框架,那么,也就是说MVC并不是.NET特有的,其他语言也有自己的MVC实现,我们在真实项目中使用的,其实也不是真正的MVC。但是第一个MVC程序一定要简单,所以我们使用微软提供的MVC来做。微软在.NET3.5以后的版本都支持MVC,这里使用的是.NET4.5版本下面的MVC4。好了,下面来新建一个We项目,如图2-11所示。图2-11新建We项目如果读者以前用的是ViualStudio2010,那么这个界面可能不太习惯。从ViualStudio2012开始,WeForm、MVC、WeAPI等这样的We项目都变成了一个“ASP.NETWe应用程序”,选择这个应用程序以后,单击“确定”按钮,进入选择项目类型步骤,如图2-12所示。图2-12选择We类型在这一步中选择MVC项目,然后单击“确定”按钮,进入项目解决方案的管理界面,如图2-13所示。图2-13MVC代码界面可以看到,在图2-13中,用标注框所标出来的地方就是我们前面所提到的Model、View、Cotroller。打开HomeCotroller.c,修改Idex方法为下面的代码:ulicActioReultIdex(){trigmg=trig.Format(@"这世界,我来了!")ViewBag.Meage=mgreturView()}然后修改对应的Idex.chtml为下面的代码:@ViewBag.Meage直接运行代码后会发现,我们写的文字已经显示在页面上了。页面效果如图2-14所示。图2-14第一个MVC程序页面效果运行程序以后会发现,URL只是localhot:端口号,而没有实质的页面路径。我们把URL补全为localhot:端口号/home/idex,还能看到相同的效果。通过这个简单的程序可以看到,用户(这里是浏览器)是向控制器(Cotroller)中的Actio(这里是Idex)发起请求,Actio会进行数据处理(本例中是给ViewBag.Meage赋值),然后返回给View(视图),View接收到返回数据以后,将数据显示到页面上,最后就可以通过浏览器看到效果了。这段话里埋下了太多没有讲解的知识点。(1)为什么localhot:端口号==localhot:端口号/home/idex打开A_Start下面的路由配置文件RouteCofig.c,如图2-15所示。图2-15路由配置文件可以看到这个文件中配置了一个叫Route.MaRoute的对象。这个对象有一个默认属性defalt,表示当URL中没有控制器和Actio的时候,指向哪个控制器下的Actio。在本例中,它指向的是home/idex。当然,这个默认设置是可以修改的。(2)ViewBag是什么在Idex这个Actio中使用了ViewBag对象,它是一个数据传递的载体,只需要为这个对象的属性赋值,前台就可以取到了,ViewBag的属性是不需要提前定义的,例如,要给ViewBag.Mol赋值为“帅”,那么前台就可以通过ViewBag.Mol来获取到“帅”。是不是很神奇?除了ViewBag,还有一个叫ViewData的对象也可以完成类似的操作。它的用法是:ViewData["Mol"]="帅";关于ViewBag和ViewData的区别,这里不做详述,大家需要自行去学习。(3)Model跑哪里去了Model呢?前面用到了控制器和视图,单单把Model落下了。Model是一个实体集合,可以定义任何实体类。这个实体类可以是用户类,可以是订单类……可以把Model理解为这样一种东西:它是一种载体,通过这种载体,可以以面向对象的思维去处理数据。例如,定义一个Uer类,那么在控制器中就可以实例化一个Uer类,然后传给视图去展示。伪代码如下:Ueruer=ewUer()uer.ame="Mol"uer.geder="male"ViewBag.Pero=uer如果大家还不太了解MVC,那么就找一些资料学习一下。本书的重点不是MVC,所以这里只是略带一说。2.3.3为什么要用MVC之我见其实MVC与传统WeForm的区别还是很多的,但是很多不同点还不足以引起大家使用MVC的欲望。这里只说几点大家可能会关注的地方。·WeForm更容易上手,也就意味着程序员会忽略更多的细节。比如一个按钮是如何被解析成iut标签的。这样的编程方式其实不利于对程序的理解。·WeForm中设计了“生命周期”的模式,从页面出生到消亡,会经历很多个状态,比如常见的Page_Load就是其中的一个状态。这样多的生命周期,其实并不利于新手理解程序是如何处理请求的。·WeForm页面中会保存大量的ViewState,这样就可以记住“之前”(事件触发前)的状态。这些ViewState会对优化工作造成不小的困扰,而且经常在程序员不注意的时候,页面就会狂飙到好几兆的大小。如果你用过WeForm,也用过MVC,那么一定会觉得MVC是非常纯净的,因为它的流程透明,页面干净,不会生成意想不到的ViewState。·WeForm中的页面都是继承自Sytem.We.Page类。而Page类是不可以实例化的,那么这种现象就会对单元测试造成很大的困难,有些程序员甚至直接跳过了单元测试。而在MVC中,所有的请求将会被汇集到Cotroller类中,而对控制器和其中的Actio做单元测试是比较容易的。·WeForm中的前台是ax页面,也就是说这个前台页面并不是一个纯净的HTML页面。当程序员从美工手中接过静态页面的设计以后,需要把大量的iut标签转换成按钮、单元框、文本框……这个枯燥的工作一定会把人逼疯的。·这一点其实算是个彩蛋,因为并不能算是一个非常直接的原因。把项目提交到Git上以后,Git平台中的“代码分析”功能会检查整个项目的代码完整性、可读性、规范性等。其中,规范性要求代码需要按照一定的命名规则来书写,而如果项目使用了WeForm,那么Page_Load这样的函数名就一定会被检查出来,并且还没有办法把它改成其他的函数名,这是多么的“坑爹”。其他的区别还有很多,但以上所列几点已经有足够的理由让我们去使用MVC。在本章中,我们将使用微软提供的MVC来做示例。在前面的内容中提到过,MVC只是一种编程思想,而不是某个公司或机构的专有技术,在后面的章节中,我们会引入Srig.NET中的MVC。2.4向三层代码中加入面向对象面向对象其实是一个非常宽泛的概念,宽泛到不足以用一个章节甚至是一本书来说明面向对象,但MOL将尽量在书中的例子中浸透面向对象的思维。前面已经讲述了通常的三层代码结构,本节将在三层代码中加入面向对象的元素。这种面向对象的思想在本节中将体现在两个地方:·数据库表的面向对象;·将所有的SQL操作都放到一个类(SqlHeler)中。2.4.1实例化数据库表通常意义上,从数据库中获取数据,一般都需要按照ADO.NET的步骤来写,ADO.NET的代码如下://////获取所有的订单信息//////ulicDataSetGetOrder(){trigcoectioStrig=@"DataSource=.IitialCatalog=ReortServerUerID=aPaword=000"DataSetre=ewDataSet()uig(SqlCoectioco=ewSqlCoectio(coectioStrig)){trigql=@"electuerid,ueramefromuer"SqlDataAdaterada=ewSqlDataAdater(ql,co)ada.Fill(re)}returre}获取到数据源以后,需要在BLL层进行数据装配。BLL层代码比较简单,只是简单调用DAL层返回数据,BLL层代码如下:ulicclaOrderBll{//////调用DAL获取数据//////ulicDataSetGetOrder(){OrderDaldal=ewOrderDal()returdal.GetOrder()}}然后再以DataSet的形式返回到前台,前台在展示的时候,就需要按照DataSet的格式来展示。比如,展示uerid字段,那么就需要这样写:uerid:@ViewBag.ueriduerame:@ViewBag.uerame展示效果如图2-16所示。图2-16获取数据展示效果通过上面的代码可以发现,DataSet这个类将贯穿于DAL-BLL-UI这三层之间。而DataSet类是一个与数据库打交道的类,这样就导致我们不管在哪一层(Layer)都需要知道这个数据集(DataSet)里的结构,包括这个数据集中有几个表,每个表中包含哪些字段等。当操作的表达到几十个的时候,用DataSet操作数据已经变得非试读结束[说明:试读内容隐藏了图片]...

    2022-04-04 架构 代码 编程 基础架构即代码

学习考试资源网-58edu © All Rights Reserved.  湘ICP备12013312号-3 
站点地图| 免责说明| 合作请联系| 友情链接:学习乐园