北京做视觉网站,it运维服务外包,如何修改网站后台代码,wordpress仿qq空间主题1、详细说说你的项目吧 从以下几个方面进行项目介绍#xff1a; 1、项目的背景#xff0c;包括#xff1a;是自研还是外包、什么业务、服务的客户群是谁、谁去运营等问题。 2、项目的业务流程 3、项目的功能模块 4、项目的技术架构 5、个人工作职责 6、个人负责模块的详细说…1、详细说说你的项目吧 从以下几个方面进行项目介绍 1、项目的背景包括是自研还是外包、什么业务、服务的客户群是谁、谁去运营等问题。 2、项目的业务流程 3、项目的功能模块 4、项目的技术架构 5、个人工作职责 6、个人负责模块的详细说明包括模块的设计所用到的技术技术的实现方案等。 一个例子 我最近参与的项目是我们公司自研的专门针对成人职业技能教育的网络课堂系统网站提供了成人职业技能培训的相关课程如软件开发培训、职业资格证书培训、成人学历教育培训等课程。项目基于B2B2C的业务模式培训机构可以在平台入驻、发布课程我们公司作为运营方由专门的人员对发布的课程进行审核审核通过后课程才可以发布成功课程包括免费和收费两种形式对于免费课程普通用户可以直接选课学习对于收费课程在选课后需要支付成功才可以继续学习。 本项目包括用户端、机构端、运营端三个端。 核心模块包括内容管理、媒资管理、课程搜索、订单支付、选课管理、认证授权等。 本项目采用前后端分离架构后端采用SpringBoot、SpringCloud技术栈开发数据库使用了MySQL还使用的Redis、消息队列、分布式文件系统、Elasticsearch等中间件系统。 划分的微服务包括内容管理服务、媒资管理服务、搜索服务、订单支付服务、 学习中心服务、系统管理服务、认证授权服务、网关服务、注册中心服务、配置中心服务等。 我在这个项目中负责了内容管理、媒资管理、订单支付模块的设计与开发。 内容管理模块是对平台上的课程进行管理课程的相关信息比较多这里在数据库设计了课程基本信息表、课程营销表、课程计划、课程师资表进行存储 培训机构要发布一门课程需要填写课程基本信息、课程营销信息、课程计划信息、课程师资信息填写完毕后需要提交审核由运营人员进行课程信息的审核整个审核过程是程序自动审核加人工确认的方式通常24小时审核完成。课程审核通过即可发布课程课程的相关信息会聚合到课程发布表中这里不仅要将课程信息写到课程发布表还要将课程信息写到索引库、分布式文件系统中所以这里存在分布式事务的问题项目使用本地消息表加任务调度的方式去解决这里的分布式事务保存数据的最终一致性。 2、内容管理模块业务流程 模块介绍 课程名称、课程介绍、课程价格、课程图片、师资等信息 继续延伸分析 这么多课程信息进行归类方便用户编辑分为课程基本信息、课程营销信息、课程师资等信息。 业务流程 内容管理的业务由教学机构人员和平台的运营人员共同完成。 教学机构人员的业务流程如下 1、登录教学机构。 2、维护课程信息添加一门课程需要编辑课程的基本信息、上传课程图片、课程营销信息、课程计划、上传课程视频、课程师资信息等内容。 3、课程信息编辑完成通过课程预览确认无误后提交课程审核。 4、待运营人员对课程审核通过后方可进行课程发布。 运营人员的业务流程如下 1、查询待审核的课程信息。 2、审核课程信息。 3、提交审核结果。 3、媒资模块介绍 媒资管理系统是每个在线教育平台所必须具备的查阅百度百科对它的定义如下 媒体资源管理(Media Asset ManagementMAM)系统是建立在多媒体、网络、数据库和数字存储等先进技术基础上的一个对各种媒体及内容(如视/音频资料、文本文件、图表等)进行数字化存储、管理以及应用的总体解决方案包括数字媒体的采集、编目、管理、传输和编码转换等所有环节。其主要是满足媒体资源拥有者收集、保存、查找、编辑、发布各种信息的要求为媒体资源的使用者提供访问内容的便捷方法实现对媒体资源的高效管理大幅度提高媒体资源的价值。 每个教学机构都可以在媒资系统管理自己的教学资源包括视频、教案等文件。 目前媒资管理的主要管理对象是视频、图片、文档等包括媒资文件的查询、文件上传、视频处理等。 媒资查询教学机构查询自己所拥有的媒资信息。 文件上传包括上传图片、上传文档、上传视频。 视频处理视频上传成功系统自动对视频进行编码处理。 文件删除教学机构删除自己上传的媒资文件。 4、大文件断点续传 什么是断点续传 引用百度百科断点续传指的是在下载或上传时将下载或上传任务一个文件或一个压缩包人为的划分为几个部分每一个部分采用一个线程进行上传或下载如果碰到网络故障可以从已经上传或下载的部分开始继续上传下载未完成的部分而没有必要从头开始上传下载断点续传可以提高节省操作时间提高用户体验性。 流程如下 1、前端上传前先把文件分成块 2、一块一块的上传上传中断后重新上传已上传的分块则不用再上传 3、各分块上传完成最后在服务端合并文件 5、视频转码 查询待处理任务 查询待处理任务只处理未提交及处理失败的任务任务处理失败后进行重试最多重试3次。 任务处理成功将待处理记录移动到历史任务表。 2.添加待处理任务 上传视频成功向视频处理待处理表添加记录暂时只添加对avi视频的处理记录。 根据MIME Type去判断是否是avi视频 3.开始执行任务 3.1.分布式锁 前边分析了保证任务不重复执行的方案理论上每个执行器分到的任务是不重复的但是当在执行器弹性扩容时无法绝对避免任务不重复执行比如原来有四个执行器正在执行任务由于网络问题原有的0、1号执行器无法与调度中心通信调度中心就会对执行器重新编号原来的3、4执行器可能就会执行和0、1号执行器相同的任务。 基于数据库的乐观锁实现方式 利用数据库主键唯一性的特点或利用数据库唯一索引、行级锁的特点比如多个线程同时向数据库插入主键相同的同一条记录谁插入成功谁就获取锁多个线程同时去更新相同的记录谁更新成功谁就抢到锁。 4.分块文件清理问题 上传一个文件进行分块上传上传一半不传了之前上传到minio的分块文件要清理吗怎么做的 1、在数据库中有一张文件表记录minio中存储的文件信息。 2、文件开始上传时会写入文件表状态为上传中上传完成会更新状态为上传完成。 3、当一个文件传了一半不再上传了说明该文件没有上传完成会有定时任务去查询文件表中的记录如果文件未上传完成则删除minio中没有上传成功的文件目录。 6.消息处理sdk 下边对消息SDK的设计内容进行说明 sdk需要提供执行任务的逻辑吗 拿课程发布任务举例执行课程发布任务是要向redis、索引库等同步数据其它任务的执行逻辑是不同的所以执行任务在sdk中不用实现任务逻辑只需要提供一个抽象方法由具体的执行任务方去实现。 如何保证任务的幂等性 在视频处理章节介绍的视频处理的幂等性方案这里可以采用类似方案任务执行完成后会从消息表删除如果消息的状态是完成或不存在消息表中则不用执行。 如何保证任务不重复执行 采用和视频处理章节一致方案除了保证任务的幂等性外任务调度采用分片广播根据分片参数去获取任务另外阻塞调度策略为丢弃任务。 注意这里是信息同步类任务即使任务重复执行也没有关系不再使用抢占任务的方式保证任务不重复执行。 还有一个问题根据消息表记录是否存在或消息表中的任务状态去保证任务的幂等性如果一个任务有好几个小任务比如课程发布任务需要执行三个同步操作存储课程到redis、存储课程到索引库存储课程页面到文件系统。如果其中一个小任务已经完成也不应该去重复执行。这里该如何设计 将小任务作为任务的不同的阶段在消息表中设计阶段状态。 每完成一个阶段在相应的阶段状态字段打上完成标记即使这个大任务没有完成再重新执行时如果小阶段任务完成了也不会重复执行某个小阶段的任务。 7.什么是OAuth3 OAuth2认证流程 在前边我们提到微信扫码认证这是一种第三方认证的方式这种认证方式是基于OAuth2协议实现 OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。同时任何第三方都可以使用OAUTH认证服务任何服务提供商都可以实现自身的OAUTH认证服务因而OAUTH是开放的。业界提供了OAUTH的多种实现如PHP、javaScriptjavaRuby等各种语言开发包大大节约了程序员的时间因而OAUTH是简易的。互联网很多服务如Open API很多大公司如GoogleYahooMicrosoft等都提供了OAUTH认证服务这些都足以说明OAUTH标准逐渐成为开放资源授权的标准。 Oauth2包括以下角色 1、客户端 本身不存储资源需要通过资源拥有者的授权去请求资源服务器的资源比如手机客户端、浏览器等。 上边示例中黑马网站即为客户端它需要通过浏览器打开。 2、资源拥有者 通常为用户也可以是应用程序即该资源的拥有者。 A表示 客户端请求资源拥有者授权。 B表示 资源拥有者授权客户端即黑马网站访问自己的用户信息。 3、授权服务器也称认证服务器 认证服务器对资源拥有者进行认证还会对客户端进行认证并颁发令牌。 C 客户端即黑马网站携带授权码请求认证。 D认证通过颁发令牌。 4、资源服务器 存储资源的服务器。 E表示客户端即黑马网站携带令牌请求资源服务器获取资源。 F表示资源服务器校验令牌通过后提供受保护资源。 8.OAuth3在本项目的应用 Oauth2是一个标准的开放的授权协议应用程序可以根据自己的要求去使用Oauth2本项目使用Oauth2实现如下目标 1、学成在线访问第三方系统的资源。 本项目要接入微信扫码登录所以本项目要使用OAuth2协议访问微信中的用户信息。 2、外部系统访问学成在线的资源 。 同样当第三方系统想要访问学成在线网站的资源也可以基于OAuth2协议。 3、学成在线前端客户端 访问学成在线微服务的资源。 本项目是前后端分离架构前端访问微服务资源也可以基于OAuth2协议进行认证。 9.什么是JWT json Web TokenJWT是一种使用json格式传递数据的网络令牌技术它是一个开放的行业标准RFC 7519它定义了一种简洁的、自包含的协议格式用于在通信双方传递json对象传递的信息经过数字签名可以被验证和信任它可以使用HMAC算法或使用RSA的公钥/私钥对来签名防止内容篡改。官网https://jwt.io/ 使用JWT可以实现无状态认证什么是无状态认证 传统的基于session的方式是有状态认证用户登录成功将用户的身份信息存储在服务端这样加大了服务端的存储压力并且这种方式不适合在分布式系统中应用。 如果是基于令牌技术在分布式系统中实现认证则服务端不用存储session可以将用户身份信息存储在令牌中用户认证通过后认证服务颁发令牌给用户用户将令牌存储在客户端去访问应用服务时携带令牌去访问服务端从jwt解析出用户信息。这个过程就是无状态认证。 JWT令牌由三部分组成每部分中间使用点.分隔 Header 头部包括令牌的类型即JWT及使用的哈希算法如HMAC SHA256或RSA Payload 第二部分是负载内容也是一个json对象它是存放有效信息的地方它可以存放jwt提供的信息字段比如iss签发者,exp过期时间戳, sub面向的用户等也可自定义字段。 Signature 第三部分是签名此部分用于防止jwt内容被篡改。 这个部分使用base64url将前两部分进行编码编码后使用点.连接组成字符串最后使用header中声明的签名算法进行签名。 7.微信登录流程 本项目认证服务需要做哪些事 1、需要定义接口接收微信下发的授权码。 2、收到授权码调用微信接口申请令牌。 3、申请到令牌调用微信获取用户信息 4、获取用户信息成功将其写入本项目用户中心数据库。 5、最后重定向到浏览器自动登录。 10.认证方案 1.通过认证服务颁发jwt令牌 2.通过网关认证 下边实现网关认证实现以下职责 1、网站白名单维护 针对不用认证的URL全部放行。 2、校验jwt的合法性。 除了白名单剩下的就是需要认证的请求网关需要验证jwt的合法性jwt合法则说明用户身份合法否则说明身份不合法则拒绝继续访问。 3.通过jwt获取令牌信息 11.怎么统一登录接口的 使用策略模式通过判断前端传递的code参数去容器中拿取不同的service实现不同的业务逻辑 12.密码有加密吗 数据库中的密码加过密的用户输入的密码是明文我们需要修改密码格式器PasswordEncoder原来使用的是NoOpPasswordEncoder它是通过明文方式比较密码现在我们修改为BCryptPasswordEncoder它是将用户输入的密码编码为BCrypt格式与数据库中的密码进行比对。 13.用户信息怎么扩展的 在认证阶段DaoAuthenticationProvider会调用UserDetailService查询用户的信息这里是可以获取到齐全的用户信息的。由于JWT令牌中用户身份信息来源于UserDetailsUserDetails中仅定义了username为用户的身份信息这里有两个思路第一是可以扩展UserDetails使之包括更多的自定义属性第二也可以扩展username的内容 比如存入json数据内容作为username的内容。相比较而言方案二比较简单还不用破坏UserDetails的结构我们采用方案二。 在前边我们自定义了UserDetailsService接口实现类通过loadUserByUsername()方法根据账号查询用户信息。 我们可以在loadUserByUsername()方法上作文章将用户原来提交的账号数据改为提交json数据json数据可以扩展不同认证方式所提交的各种参数。 14.你项目用的Spring Security他只有默认的几个认证如何支持多样化的认证方式呢 目前我们测试通过OAuth2的密码模式用户认证会提交账号和密码由DaoAuthenticationProvider调用UserDetailsService的loadUserByUsername()方法获取UserDetails用户信息。 在前边我们自定义了UserDetailsService接口实现类通过loadUserByUsername()方法根据账号查询用户信息。 而不同的认证方式提交的数据不一样比如手机加验证码方式会提交手机号和验证码账号密码方式会提交账号、密码、验证码。 我们可以在loadUserByUsername()方法上作文章将用户原来提交的账号数据改为提交json数据json数据可以扩展不同认证方式所提交的各种参数。 原来的DaoAuthenticationProvider 会进行密码校验现在重新定义DaoAuthenticationProviderCustom类重写类的additionalAuthenticationChecks方法。 修改WebSecurityConfig类指定daoAuthenticationProviderCustom 15.如何实现授权 基于RBAC实现授权 基于角色的访问控制Role-Based Access Control xc_user用户表存储了系统用户信息用户类型包括学生、老师、管理员等 xc_role角色表存储了系统的角色信息学生、老师、教学管理员、系统管理员等。 xc_user_role用户角色表一个用户可拥有多个角色一个角色可被多个用户所拥有 xc_menu:模块表记录了菜单及菜单下的权限 xc_permission:角色权限表一个角色可拥有多个权限一个权限可被多个角色所拥有本项目要求掌握基于权限数据模型5张数据表要求在数据库中操作完成给用户分配权限、查询用户权限等需求。 1、查询用户所拥有的权限 2、给用户分配权限 1添加权限 查询用户的id 查询权限的id 查询用户的角色如果没有角色需要先给用户指定角色 向角色权限表添加记录 2删除用户权限 本项目是基于角色分配权限如果要删除用户的权限可以给用户换角色那么新角色下的权限就是用户的权限如果不换用户的角色可以删除角色下的权限即删除角色权限关系表相应记录这样操作是将角色下的权限删除属于该角色的用户都将删除此权限。 3. 使用Spring Security进行授权首先在生成jwt前会查询用户的权限 16.支付流程 1、请求学习中心服务创建选课记录 2、请求订单服务创建商品订单、生成支付二维码。 3、用户扫码请求订单支付服务订单支付服务请求第三方支付平台生成支付订单。 4、前端唤起支付客户端用户输入密码完成支付。 5、第三方支付平台支付完成发起支付通知。 6、订单支付服务接收第三方支付通知结果。 7、用户在前端查询支付结果请求订单支付服务查询支付结果。 8、订单支付服务向学习中心服务通知支付结果。 9、学习中心服务收到支付结果如果支付成功则更新选课记录并添加到我的课程表。 17.说说你的缓存优化 200qps-500qps 测试用例是根据id查询课程信息这里不存在复杂的SQL也不存在数据库连接不释放的问题暂时不考虑数据库方面的优化。 课程发布信息的特点的是查询较多修改很少这里考虑将课程发布信息进行缓存。 18.说说你项目中使用的分布式锁 分布式锁避免缓存击穿 当缓存失效时重建缓存的时候查询数据库时避免大量线程同时请求数据库每门课程设置一个锁细粒度控制在查询数据库时。