架构设计(一)

1.前后端分离

前后端分离是指将一个web 系统的动态内容和静态内容进行分离,包括其开发、部署等。
比如传统的 MVC 架构,HTML、JS、CSS… 等前端代码和 Java、spring、mybatis… 等后端代码是在同一个项目中进行开发、部署的。那前后端分离后,就可以分多个项目进行开发、部署、多个前端、多个后端,通过 http restful api 接口的形式进行交互。

前后端分离的好处:

  1. 前端和后端互不影响,实现高内聚低耦合,提升工作效率。
  2. 静态资源不占用后端资源,可维护性,扩展性更好。
  3. 静态资源可以缓存到代理服务器上(Nginx),加速响应。
  4. 静态资源可以部署带 CDN ,用户可以就近访问,提升用户的访问速度和体验。
2.三层架构
  • 界面层 UIL(User Interface Layer)
  • 业务逻辑层 BLL(Business Logic Layer)
  • 数据访问层 DAL(Data Access Layer)
    三层架构的区分层次的目的是为了符合“高内聚,低耦合”,各层之间采用接口形式访问,并通过对象模型的实体类(Model)作为数据传递的载体。

三层架构和 MVC 的区别:
MVC是指:M:业务模型(Model)、V:用户界面(View)、C:控制器(Controller)

  1. 两者不是同一个东西,三层架构是一个分层式的软件体系架构设计,是针对整个软件系统的解耦,各层之间通过接口进行交互;而 MVC 是一个软件设计模式,是针对 Web 系统的解耦。
  2. MVC 是应用在三层架构基础之上的,MVC 中的V/C 相当于三层架构中的 UIL 界面层,而 M 相当于三层架构中的 BLL/DAL 层。
3.秒杀系统参考的技术点
  1. 尽量将请求拦截在前端,避免后端的压力,比如
    1)前端随机拒绝请求
    2)按钮没开始置灰
    3)按钮点完置灰
    4)避免重复请求
  2. 静态页面加速,比如:
    1)页面静态化
    2)静态资源缓存
    3)部署到 CDN
  3. 防止刷单(秒杀开始前才生成秒杀接口地址,接口地址动态化)
  4. 后端启动缓存(尽量减少数据库的请求)
  5. 服务降级(暂停非核心的服务)
  6. 后端启用 IP 限流(超过拒绝连接)
  7. 服务独立部署(不影响核心的业务)
  8. 服务扩展(临时扩展一定的机器保证秒杀)
  9. 考虑秒杀时的带宽
  10. 达到上限后端拒绝(秒杀结束)
4.安全登录流程考虑的方面
  • 使用 https 协议进行传输,虽然麻烦,但是很强的保护措施。
  • 强制用户使用有一定强度且复杂的密码,必须要有大小写加数字,长度在8位以上,杜绝想纯数字之类的密码。
  • 密码不要明文保存到数据库,CSDN当年使用明文存储密码导致用户密码被完全暴露,这个事件影响十分严重。所以造成不要使用明文存储密码,要使用像MD5之类的散列算法加密存储,加密之前密码同时还要加上不固定的salt值一起拼接加密,一般MD5+salt就可以了,这个salt是盐,一起加密增加密码的长度也增加了破解的难度,盐一般设计为64位随机生成的字符串,最好分开存放,假如用户信息被攻击了黑客也拿不到盐的库。不能使用可逆的算法,如果可逆,那如何保存秘钥是个非常棘手的问题,一般使用明文加密与数据库中密文对比就能确定密码正确与否,我们不需要知道用户的是什么,如果用户忘了可以通过重置或密码保护问题修改密码,这也比总明文存储要好一万倍。
  • MD5现在已经不是十分安全了,最好使用sha256 ,sha512 之类安全强度更高的散列加密算法。
  • 用户名密码错误不要单方面提示,如果密码错误提示用户说密码错误这样攻击者就知道用户名是对的,下次攻击密码,所以不管是用户名还是密码错误都给出同样的提示,用户名秘密错误,或者别的不具体的提示的错误都可以。
  • 前端禁止用户输入导致sql注入的字符,后台也要做sql注入的防护。
  • 保存历史密码,一段时间没登录的用户再次登录是提示要修改秘密才能登录,这时新密码不能和历史的密码一样,苹果就要这么做的。
  • 保存每次的登录信息日志,如果登录的 IP 与以往有很大差别,要引导用户重置密码方可登录。
  • 不要再cookie 中保留用户密码,如果一定要使用cookie实现自动登录,切记不用使用简单的用户名+秘密MD5保存到cookie,要把用户ID、用户名、过期时间、IP、不固定的salt 等一起考虑进去,这个当然可逆,服务端要进行解密才能允许是否自动登录有效。别外,cookie要设置为http only ,这样就不能通过脚本访问cookie,保证cookie的安全性。
  • 不要让浏览器记住密码,虽然记住密码很方便,但也不安全,所以前端最好做好控制。
  • 一段时间内尝试登录失败次数达到某个值,要锁定用户登录,如果登录失败5次登录锁定24小时。或者间隔性锁定,如果登录失败3次锁定一段时间一次类推。
  • 设置会话有效期,不如登录后10分钟不操作就失效,要重新登录。
  • 验证码的使用,加上干扰线,防止计算机能够轻易识别,这样也可以防止黑客一程序的方式来尝试登录。
  • 手机登录的一般使用短信验证的,控制验证码的时效性,即验证码一次有效,一分钟内只能发送一次。
  • 有必要的话可以采用单点登录,如果允许用户多处登录的要给用户安全提醒。
  • 重置密码最好通过邮件发送一定时间内生效的重新链接,或者手机短信验证,或者两者相结合的方法。像一般的大公司都有这几一个动态密码的东西,手机及一切,都要妥善的保管自己的app,最好加上各种上锁措施。
  • 设置用户可登录的IP,即 IP 白名单。像财务系统,限制财务人员只能在办公室才能登录系统。
5.长链接转短连接实现的方案

通过长链接转短连接,通过短连接可以调到长链接。

  1. 主要是一个映射关系,可以在数据库中存储长链接和短连接之间的映射关系。
  2. 唯一的短码的生成,一般 6-8 位足够(自增 ID、随机数、hash算法、MD5等)
  3. 根据短网址域名查询到短码对应的长链接,再通过重定向访问长链接的请求地址。
    **注:**如果数据和访问量大的话可以考虑使用大数据,缓存等方案。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值