微服务安全简介

​由于其可扩展性、灵活性和敏捷性,微服务架构已经变得越来越受欢迎。然而,随着这种架构的分布和复杂性增加,确保强大的安全措施变得至关重要。微服务的安全性超越了传统的方法,需要采用全面的策略来保护免受不断演变的威胁和漏洞的影响。通过理解核心原则并采取有效的安全措施,组织可以加强其微服务架构,并保护敏感数据和资源。

微服务简介

微服务是一种软件开发架构风格,应用程序被创建为一组通过明确定义的API(应用程序编程接口)连接的小型独立服务。每个微服务负责一个独立的业务能力,并可以独立于其他服务创建、实施和扩展(Sascha Möllering, 2021)。微服务允许将应用程序划分为更小、可管理的组件,可以根据需求进行独立扩展。这种可扩展性使组织能够快速响应变化,并更有效地处理高流量负载。通过将应用程序分解为具有自己的界限上下文和功能的较小服务,可以更容易地理解、开发、测试和维护代码库。开发人员可以专注于单个服务而不会影响整个应用程序。微服务促进了故障隔离,因为一个服务的故障不一定会影响整个应用程序。它实现了优雅降级和容错,即使某个特定服务出现问题,其他服务仍然可以继续运行。微服务允许组织根据其特定需求为各个服务选择不同的技术、编程语言和框架。这种灵活性鼓励使用最合适的工具和技术来开发每个服务,提高整体开发效率和效果。微服务促进了分散式的开发和部署。多个开发团队可以同时开发不同的服务,每个服务可以独立部署、更新或替换,而不会影响其他服务或需要进行完整的应用程序发布。 通过微服务,更容易实施持续集成和持续部署(CI/CD)实践。服务可以独立开发、测试和部署,实现更快的发布周期,并降低与大型、单体式部署相关的风险。微服务与云原生和分布式系统架构相吻合。它们与容器化和编排技术(如Docker和Kubernetes)自然结合,使得在云上部署和维护微服务更加简单。与传统的单体式架构不同,微服务提供了更大的灵活性、可扩展性、可维护性和容错性。这些优势在现代应用程序开发中越来越受欢迎,特别是在寻求构建强大、可扩展和敏捷系统的组织中。


微服务的简要历史

微服务作为一种架构风格,受到了各种软件开发实践和技术进步的影响而不断演进。微服务的根源可以追溯到在20世纪90年代末和21世纪初出现的面向服务的架构(SOA)的概念。SOA旨在创建松耦合、可重用的软件服务,这些服务可以被编排以构建复杂的应用程序。2000年代末和2010年代初,Web API的出现和广泛采用的云计算对塑造微服务起到了重要作用。Web API允许分布式系统之间进行轻松集成和通信,而云平台提供了托管和扩展应用程序的基础设施。DevOps实践的兴起和对持续交付的关注进一步影响了微服务的演进。DevOps强调开发和运维团队之间的协作,促进了需要更小、独立组件的需求,这些组件可以更快地开发、测试和部署。2013年发布的反应式宣言强调了高响应性、可扩展性和弹性系统的需求。这推动开发人员探索新的架构模式,包括微服务,以解决与单体应用程序相关的可扩展性挑战。Netflix通过其基于微服务的架构的成功在推广微服务方面发挥了关键作用。2014年,Netflix分享了其经验和最佳实践,强调了松耦合、可独立部署的面向服务的方法的好处。同年,软件开发思想领袖Martin Fowler发表了一篇有影响力的关于微服务的文章,进一步引起了对这种架构风格的关注。该报告概述了微服务的关键特性、优势和挑战,巩固了这个概念在软件开发社区中的地位。随着时间的推移,出现了各种支持微服务开发、部署和管理的框架、工具和技术。这些包括像Docker这样的容器化技术、像Kubernetes这样的编排平台、服务发现工具、API网关和监控解决方案。微服务最近获得了显著的关注,许多组织都采用了这种架构风格。亚马逊、谷歌、优步和爱彼迎等公司都采用了微服务来实现软件开发和部署过程中的可扩展性、灵活性和敏捷性。值得注意的是,微服务并不是一种适合所有情况的解决方案,它也带来了复杂性和挑战。然而,随着开发人员和组织在日益分布式的云原生计算环境中寻求构建模块化、可扩展和弹性的应用程序,微服务的受欢迎程度不断增长。


单体应用与微服务

单体应用与微服务是构建软件应用程序的两种对比的架构风格。大多数单体应用在安全方面是集中管理的,各个组件只需要在必要时进行额外的检查。因此,单体应用的安全模型比基于微服务架构的应用程序要简单得多。

单体应用与微服务

单体应用:

结构:单体应用是作为一个单一的、自包含的单元构建的。所有组件,如用户界面、业务逻辑和数据访问层,紧密耦合并在同一个进程中运行。

部署:通常将整个单体应用作为一个单一单元部署在服务器或虚拟机上。扩展应用通常涉及整体扩展单体,如果特定组件需要更多资源,则可能效率低下。

技术栈:单体应用通常在整个过程中使用单一技术栈,这样更容易开发和维护。然而,这限制了在不同组件中选择不同技术的灵活性。

开发和部署:单体应用的开发和部署通常遵循顺序过程,其中对一个组件的更改可能需要重新部署整个应用程序;这可能会减慢开发周期并限制灵活性。

可扩展性:扩展单体应用可能具有挑战性,因为需要复制整个应用程序,即使只有特定组件需要额外资源;这可能导致资源利用效率低下。

微服务:

结构:微服务将应用程序拆分为小的、松散耦合的、可独立部署的服务。每个服务专注于特定的业务能力,并通过明确定义的API与其他服务通信。

部署:微服务可以独立部署,允许可扩展性和灵活性。每个服务可以根据需求独立扩展,提高资源利用率。

技术栈:微服务允许根据各个服务的特定需求使用不同的技术栈。这提供了灵活性,并使团队能够为每个服务选择最合适的技术。

开发和部署:微服务促进了每个服务的独立开发和部署。这使得团队可以同时处理不同的服务,并在不影响其他应用程序部分的情况下部署更改。

可扩展性:微服务提供更好的可扩展性,因为每个服务可以根据其特定需求进行独立扩展。这允许有效的资源分配,并能够处理不同服务的不同需求水平。

复杂性:微服务引入了复杂性,因为应用程序的分布式性质和服务间通信的需求。管理网络通信、数据一致性和整体系统架构可能具有挑战性。

弹性:微服务提供更好的故障隔离,因为一个服务的故障不一定会影响其他服务。这使得系统更具弹性,可以处理故障而不会完全停机。

选择单体应用程序还是微服务架构取决于多种因素,包括应用程序的大小和复杂性、可扩展性要求、开发团队的能力以及项目的具体需求。单体应用程序提供了简单和开发的便利性,而微服务提供了可扩展性、灵活性和敏捷性。重要的是要仔细评估这些因素,以确定对于给定项目来说最合适的方法。


保护微服务的安全性

确保微服务架构的安全性是至关重要的。微服务架构通常涉及多个服务之间的数据交换。确保敏感数据的安全性、完整性和可访问性至关重要。如果不解决安全风险,可能会导致未经授权的访问、数据泄露或敏感信息的泄露。微服务架构将应用程序功能分布在多个服务中,增加了攻击面。每个服务都成为攻击者的潜在入口点。确保每个服务的安全性,并实施适当的网络安全措施,是防止未经授权访问和减轻攻击风险的关键。 微服务在服务之间的通信中高度依赖API,确保API的安全性对于防止未经授权访问、数据篡改或注入攻击至关重要。组织必须实施适当的身份验证、授权和输入验证机制,以确保只有授权的服务和用户可以访问和与API进行交互。通常使用各种技术和框架开发和维护微服务的不同团队可能会引入潜在的漏洞。定期进行漏洞评估、代码审查和渗透测试是识别和解决每个服务中的安全弱点的关键。组织应该实施适当的身份和访问管理(IAM)实践,以管理用户身份并控制对微服务的访问,每个服务应具有细粒度的访问控制,并执行最小特权原则。可以利用集中式身份验证和授权机制,如OAuth或JWT,确保跨服务的安全用户身份验证和授权。微服务通过网络相互通信,因此实现安全通信至关重要,实施安全协议,如HTTPS或TLS,确保服务之间传输的数据加密,并防止窃听或篡改。有效的监控和日志记录机制对于检测和响应安全事件至关重要,集中式日志记录和监控解决方案可以实时监控服务活动,检测异常行为,并识别潜在的安全漏洞。由于微服务的分布式特性,实施威胁检测和响应机制、入侵检测系统(IDS)、安全事件监控和自动化事件响应系统可以帮助及时识别和响应安全事件。每个微服务应定期进行安全测试,包括渗透测试和漏洞扫描,以发现缺陷并确认安全保障的有效性。安全测试应成为开发和部署生命周期的重要组成部分。

API网关在保护微服务中的作用

API网关在保护微服务架构中扮演着至关重要的角色。它们作为外部客户端请求的集中入口点,并提供各种安全功能和能力。以下是API网关在保护微服务中的关键贡献:

  1. 身份验证和授权:API网关处理传入请求的身份验证和授权,可以强制执行身份验证机制,如API密钥、令牌或OAuth,在允许访问底层微服务之前验证客户端的身份。将这些安全控制集中在网关上简化了身份验证过程,并减轻了各个微服务的负担。

  2. 访问控制和权限:API网关实现了细粒度的访问控制和权限管理,可以强制执行访问策略、基于角色的访问控制(RBAC)或其他授权机制,确保客户端只能访问适当的微服务和操作,根据其角色和权限。

  3. 速率限制和节流:API网关通过实施速率限制和节流,帮助保护微服务免受滥用和拒绝服务(DoS)攻击。它们可以对来自特定客户端或IP地址的每秒或每分钟请求数量设置限制,确保公平使用,并保持微服务的可用性和性能。

  4. 请求验证和过滤:API网关可以执行输入验证和过滤,以保护微服务免受恶意或格式错误的请求。它们可以检查和清理传入请求,验证参数、头部或有效负载,以防止常见的安全漏洞,如注入攻击或跨站脚本(XSS)。

  5. 加密和传输安全:API网关可以处理传入和传出请求的加密和传输安全,并终止SSL/TLS连接,确保客户端和网关之间的安全通信。这有助于保护传输中的敏感数据,防止窃听或篡改。

  6. 日志记录和监控:API网关通常提供日志记录和监控功能,记录有关传入请求、响应和潜在安全事件的信息。集中记录和监控数据简化了安全事件的检测和分析,有助于取证分析、合规性和主动威胁检测。

  7. 内容过滤和转换:API网关可以应用内容过滤和转换,对响应进行清理,防止漏洞。它们可以从响应中删除敏感或不必要的信息,修改有效负载或转换数据格式,确保客户端只接收所需的数据,同时防止信息泄露。

  8. 负载均衡和高可用性:API网关可以处理跨多个微服务实例的负载均衡,将传入请求分发到确保资源利用率最佳和高可用性的微服务。负载均衡有助于防止单个微服务被压垮,并提供冗余以提高容错性。

  9. API版本控制和生命周期管理:API网关可以帮助管理微服务的生命周期和API的版本控制,它们提供了一个抽象层,允许微服务的演进而不直接影响客户端。这有助于管理向后兼容性,推出更新,并以受控的方式废弃旧版本。

通过整合这些安全功能,API网关作为微服务周围的边界,强制执行安全策略,并减少了在各个服务中实施安全的复杂性。它们增强了整体的安全性、可见性和对微服务架构的控制。

没有API网关的直接客户端到微服务通信架构

使用API网关微服务通信


保护微服务架构的挑战

由于微服务架构的分布式和去中心化特性,保护微服务架构面临着一系列挑战。以下是组织常常面临的一些常见挑战。

  • 身份验证和授权:在多个微服务中管理身份验证和授权可能很复杂。确保只有经过授权的服务和用户可以访问特定的微服务及其资源,需要仔细设计和实施身份验证和授权机制,这可能涉及到OAuth、JWT(JSON Web Tokens)或API网关等技术来强制执行访问控制策略(Goikhman,2023)。
  • 通信安全:微服务通常通过网络相互通信,因此保证通信安全至关重要。通过实施加密和安全协议(如HTTPS)来保护微服务之间传输的数据,有助于防止未经授权的访问或对敏感信息的篡改。
  • 服务发现和身份管理:随着微服务数量的增加,维护一个最新的可用服务注册表并管理其身份变得具有挑战性。服务发现机制和身份管理解决方案,如服务注册表或服务网格,可以帮助解决这些挑战,并确保微服务之间的安全通信。
  • 分布式日志记录和监控:监控各个微服务和整个系统的安全性至关重要,然而,对于众多微服务来说,从各个来源收集和汇总日志、指标和安全事件可能具有挑战性。建立集中式的日志记录和监控基础设施,以跟踪和分析与安全相关的数据,有助于有效地检测和应对安全事件(Wajjakkara Kankanamge Anthony,2020)。
  • 数据安全:微服务通常处理敏感数据,确保其机密性、完整性和可用性至关重要,实施适当的数据保护措施,如加密、访问控制和安全存储机制变得至关重要。此外,定义数据所有权和访问策略以防止未经授权的数据访问或泄露也是必要的。
  • 代码和依赖管理:微服务依赖于许多依赖项,包括外部库、框架和第三方服务,确保这些依赖项安全并与最新的安全补丁保持同步可能是一个挑战。实施强大的代码审查流程、依赖管理实践和漏洞扫描工具可以帮助识别和减轻潜在的安全风险。
  • 错误处理和弹性:微服务应该安全地处理错误和异常,以避免暴露敏感信息或向攻击者提供有关系统漏洞的信息。实施适当的错误处理机制,如集中式错误日志记录和安全错误消息,有助于在不损害安全性的情况下保持系统的弹性。
  • 安全部署和DevOps实践:微服务通常是独立部署和更新的,因此需要安全的部署实践。确保安全的容器化、基础设施供应和持续集成/持续部署(CI/CD)流水线对于在部署过程中防止安全漏洞至关重要。
  • 对服务接口的威胁:微服务通常会暴露API,使其成为各种攻击的潜在目标,如注入、跨站脚本(XSS)或拒绝服务(DoS)攻击。应用强大的API安全实践,如输入验证、输出编码、速率限制和API版本控制,有助于保护微服务接口免受安全威胁。
  • 持续安全测试:在微服务架构中,定期进行安全测试是必不可少的,传统的安全测试技术如渗透测试和漏洞扫描可能需要进行调整以应对微服务的分布式特性。此外,将自动化安全测试纳入CI/CD流水线中,可以确保在开发周期的早期发现和解决安全漏洞。

解决这些挑战需要采用全面和积极的微服务安全方法。重要的是从开发的早期阶段开始考虑安全,并在整个微服务的生命周期中持续监控、评估和改进安全状况。


保护微服务架构的最佳安全实践

保护微服务架构涉及实施全面的安全措施,以保护各个微服务和整个系统。在保护微服务架构时,考虑以下一些最佳安全实践:

  1. 实施最小权限原则:应用最小权限原则,确保每个微服务只具有执行其特定功能所需的必要权限和访问权限。这减少了未经授权访问的风险,并限制了被入侵的微服务可能带来的影响。

  2. 使用安全通信协议:采用安全通信协议,如HTTPS/TLS,对微服务之间传输的数据进行加密。这可以防止窃听、篡改和未经授权访问敏感信息。

  3. 实施身份验证和授权:使用强大的身份验证机制,如OAuth或JWT,验证访问微服务的微服务和用户的身份。实施细粒度的授权控制,确保只有授权的实体可以访问特定的微服务或执行特定的操作。

  4. 应用输入验证和输出编码:验证和清理微服务接收到的所有输入数据,以防止注入攻击(如SQL注入或跨站脚本),同时对输出数据进行编码,以避免潜在的安全漏洞,并保护针对微服务接口的消费者免受攻击。

  5. 实施集中化的日志记录和监控:建立集中化的日志记录和监控系统,收集和分析所有微服务的日志、指标和安全事件。这可以实现主动威胁检测、事件响应和安全事件的取证分析。

  6. 实施速率限制和节流:通过实施速率限制和节流机制,保护微服务免受滥用、过量流量和拒绝服务(DoS)攻击。这有助于确保微服务的可用性和性能,同时防止资源耗尽。通过实施这些最佳安全实践,可以增强微服务架构的安全性,并保护其免受各种安全威胁和漏洞的影响。

7.安全的数据存储和加密:采用适当的加密机制,保护静态存储的敏感数据,无论是存储在数据库、缓存还是文件系统中。使用强大的加密算法,并安全地管理加密密钥,以保护数据的机密性。

8.定期进行安全评估和渗透测试:定期进行安全评估、漏洞扫描和渗透测试,以识别和解决微服务及其依赖项中的安全弱点。这有助于发现潜在的漏洞,并及时进行修复。

9.安全配置管理:确保对微服务及其基础架构组件进行安全配置管理,使用安全默认值,定期更新软件版本,并遵循安全加固指南,以最小化攻击面,并降低配置错误的风险。

10.持续的安全培训和意识:在从事微服务开发的开发团队中推广安全意识文化,定期进行安全培训,教育开发人员有关安全编码实践,并提高对常见安全漏洞和缓解策略的认识。

11.实施容错和弹性设计:设计微服务具有容错和弹性,以抵御攻击或故障,实施冗余、故障转移机制和分布式负载均衡,以确保微服务的可用性和连续性。

12.安全的第三方集成:审查和评估微服务与之交互的第三方服务或API的安全状况,实施安全的集成实践,验证和验证来自外部来源的输入,并确保集成遵循安全通信标准。

在微服务架构中,安全是一个持续的工作。它需要结合安全编码实践、安全基础设施配置、定期测试和持续监控,以确保系统的整体安全性。


结论

微服务架构在可扩展性和灵活性方面带来了巨大的好处,但也引入了独特的安全挑战。通过实施全面的安全策略,包括身份验证、授权、安全通信和监控,组织可以确保其微服务基础架构的完整性、机密性和可用性。拥抱以安全为先的思维方式将使企业能够在当今动态和不断演变的威胁环境中构建弹性和可信赖的微服务架构。

作者: Jagdish Mohite

更多技术干货请关注公号“云原生数据库

squids.cn,目前可体验全网zui低价RDS,免费的迁移工具DBMotion、SQL开发工具等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/45452.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Nginx与Tomcat服务器的区别以及个人网站部署方案

- Nginx和Tomcat作用一样吗? 答:不完全相同。Nginx 和 Tomcat 都可以作为 Web 服务器,但它们的作用略有不同。 Nginx 是一个高性能的 Web 服务器和反向代理服务器。它的主要作用是提供静态文件服务、反向代理、负载均衡、缓存、SSL 加密等功…

从新手到大师:优雅的Vim熟练之旅(万文详解)

从新手到大师:优雅的Vim熟练之旅 博主简介一、前言1.1、Vim编辑器的重要性和流行性1.2、目标 二、Vim简介2.1、什么是Vim2.2、历史和背景简介2.3、Vim的优势和适用场景 三、安装和设置Vim3.1、下载和安装Vim编辑器3.2、基本配置:.vimrc文件的重要性和常用…

解决使用@Field注解配置分词器失效问题(Spring Data Elasticsearch)

问题复现:插入数据时,实体类配置的Field注解没有生效 实体类: package cn.aopmin.pojo;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.data.annotation.Id; import…

网工玩虚拟机,别再只会用VMware了

中午好,我的网工朋友。 说起虚拟机,大家都不陌生吧。 虽然容器技术现在很火爆,但虚拟机还是业内网红。 毕竟使用场景非常多,比如说搭建测试环境、在Windows系统中安装Linux或在Mac机器上运行Windows系统…… 甚至还可以用来进…

jmeter随记2:压测

jmeter随记1:压测 简述一、压测步骤二、观察cpu和内存占用情况三、查看磁盘占用情况 简述 关于压测,jmeter更直观的作用是用来编写压测脚本【请求和压测策略】,然后在linux服务器上执行,也可以在本地执行,压测执行脚本在启动jmet…

深“扒”云原生高性能分布式文件系统JuiceFS

JuiceFS 是一款面向云原生设计的高性能分布式文件系统,在 Apache 2.0 开源协议下发布。提供完备的 POSIX 兼容性,可将几乎所有对象存储接入本地作为海量本地磁盘使用,亦可同时在跨平台、跨地区的不同主机上挂载读写。 JuiceFS 简介 JuiceFS…

C#月数计算器(主要用于社保、医保缴费月数计算)

1、为什么做这个? 工作中,经常需要计算参保人社保、医保缴费月数,之前都是在Excel中写一个DATEDIF公式,修改单元格中的日期,计算间隔的月数,公式如下: DATEDIF(起始日期, 终止日期, 返回类型) …

如何在APP开发中实现无缝用户体验?

我们在日常生活中经常会看到这样一种情况:当我们打开 APP时,有时会出现卡顿、死机的情况,这就是所谓的“死机”现象。在开发 APP时,我们需要考虑用户体验,在用户操作 APP时能够感受到顺畅的使用体验,让用户…

体制内裸辞,她用云端地球实现了自己的乡村梦

追逐田园的“诗与远方” “我最初的梦想,就是有一个亲手打造的、能装进个人喜好的小院子。”为完成自己的梦想,吕春萍毅然放弃了体制内的工作,来到秦岭脚下的桥南镇曹峪村,践行自己的“乡村梦”。 起初,吕春萍做了五…

晚上12点接到面试邀约电话,待业一个月的我却拒绝了....

前言 一位测试朋友最近一直在找工作,前两天刚拒绝了一个面试。那天晚上12点多,他接到一个HR的面试电话,让他第二天早上10点去公司面试。朋友和HR聊了两句,了解到这位HR经常加班,于是果断拒绝了这个面试。 我还为他可惜…

adnroid 11. 0 Activity启动流程图解

从Launcher到ActivityTaskManager 从ActivityTaskManagerService 到 ApplicationThread 从ApplicationThread到onCreate

docker基本命令学习 | Docker网络、Docker镜像发布

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! docker安装、卸载 docker安装使用 卸载旧版本docker或者环境 [rootiZf8zdcobr3fw7vn0p3538Z /]# yum remove docker \ > docker-client \ >…

【Kafka】消息队列Kafka基础

目录 消息队列简介消息队列的应用场景异步处理系统解耦流量削峰日志处理 消息队列的两种模式点对点模式发布订阅模式 Kafka简介及应用场景Kafka比较其他MQ的优势Kafka目录结构搭建Kafka集群编写Kafka一键启动/关闭脚本 Kafka基础操作创建topic生产消息到Kafka从Kafka消费消息使…

计算机网络最基础知识介绍

OSI和TCP/IP是很基础但又非常重要的知识,很多知识点都是以它们为基础去串联的,作为底层,掌握得越透彻,理解上层时会越顺畅。今天这篇网络基础科普,就是根据OSI层级去逐一展开的。 01 计算机网络基础 01 计算机网络的分类 按照网络的作用范围:广域网(WAN)、城域网(MA…

使用Gin框架搭配WebSocket完成实时聊天

文章目录 前言实时聊天聊天功能测试发送信息 前言 在写项目的时候,需要完成实时聊天的功能,于是简单的学习下WebSocket,想知道WebSocket是什么的小伙伴可以去网上别的地方学习一下。 要实现实时聊天,网上的大部分内容都是Spring…

Python爬虫+数据可视化:分析唯品会商品数据

目录 前言数据来源分析1. 明确需求2. 抓包分析:通过浏览器自带工具: 开发者工具 代码实现步骤: 发送请求 -> 获取数据 -> 解析数据 -> 保存数据发送请求解析数据保存数据 数据可视化先读取数据泳衣商品性别占比商品品牌分布占比各大品牌商品售价平均价格各…

macOS mysql 8.0 忘记密码

╰─➤ mysql -V mysql Ver 8.0.33 for macos13.3 on arm64 (Homebrew)mysql.server status mysql.server stopskip-grant-tables 启动mysql ─➤ /opt…

通达信有价值的资金流向指标公式-通达信公式

资金流向指标公式&#xff1a; 流通:AMOUNT/VOL; PJJ:DMA((HIGHLOWCLOSE*2)/4,0.9); JJ:REF(EMA(PJJ,3),1); QJJ:VOL/((HIGH-LOW)*2-ABS(CLOSE-OPEN)); XVL:(IF(CLOSE>OPEN,QJJ*(HIGH-LOW),IF(CLOSE<OPEN,QJJ*(HIGH-OPENCLOSE-LOW),VOL/2))IF(CLOSE>OPEN,0-QJJ*(…

Django框架:使用channels实现websocket,配置和项目实际使用

一、基本配置 依赖包&#xff1a; Django3.2 django-cors-headers3.5.0 redis4.6.0 #操作redis数据库的 channels3.0.0 #websocket channels-redis4.1.0 #通道层需要&#xff0c;依赖redis包项目目录结构&#xff1a; study_websocket --study_websocket --__init__.py --s…

redis 第一章

目录 1.redis 安装部署 2.redis 数据库常用命令 3.总结 1.redis 安装部署 2.redis 数据库常用命令 3.总结 redis&#xff08;远程字典服务器&#xff09;是一个开源的、使用 C 语言编写的 nosql 数据库。redis 基于内存运行并支持持久化&#xff0c;采用 key-value&#xff0…
最新文章