上手报告|今天聊聊腾讯目前在用的微服务架构

SpringCloudTencent:安装北极星polaris服务 spring cloud tencent:安装北极星polaris服务 阅读详情

自从去年 10 月份搜狗正式被腾讯合并以后,我一直想给大家讲讲腾讯内部目前开发在用的一些技术栈,我想这对同学们有很高的学习价值。但苦于公司内部有明确的规定,不允许私自对外分享和发布未经公开的信息。一经发现,高压线开除处理!所以一直迟迟都没有动手。

最近我在腾讯的 TechoDay 技术开放日活动中了解到内部在使用的微服务核心北极星(Polaris-Mesh)和一站式微服务开发框架 Spring Cloud Tencent 都已经对外开放了。

北极星 Github:https://github.com/polarismesh

Spring Cloud Tencent:https://github.com/Tencent/spring-cloud-tencent

那我今天就可以结合它们来给大家简单聊聊腾讯内部在用的微服务体系了。

一、 为什么要拥抱微服务

我是 2011 年进入腾讯的,那个时候使用的技术栈主要是 LAMP(Linux + Apache + MySQL + PHP)。当时业界还有另外一套流行的技术栈是 MVC(Spring + iBatis/Hibernate + Tomcat)。无论是 LAMP 还是 MVC,都是为单体因共用架构而设计的。开发出来的服务也是部署在物理服务器上,一般都是由运维来部署的。

在 web 网页的时代,上面两套技术栈切切实实火了很长的时间。但随着移动互联网的爆发,要开发的服务越来越多,功能也越来越杂,团队开发人员也不断地扩张,发布频率越来越高。传统的单体服务的架构就逐渐呈现出了这么几个问题。

部署服务效率低下:传统的单体服务直接部署在物理机或虚拟机上,服务运行所依赖的软件都得由运维手工去安装和配置。

机器资源很难被复用:现代的服务器配置都是非常的高,但是要运行的单体服务很少有一个服务就能把 CPU、内存等资源都充分利用起来的,会有大量的闲置。但为了保证服务之间的隔离,又往往不敢把多个不想干的服务部署在一起。

团队协作成本高 当有多个人负责同一个服务的时候,难免就会出现提交代码互相影响的情况,发布也是得商量着来。另外就是每次版本发布前的测试工作也是得需要很全面才行。

在后来,就慢慢衍生出了服务的概念。把单体应用拆分成多个不同的服务独立进行部署和发布。比如我当年负责的搜狗手机助手,在后台就是分成了应用推荐列表、应用检查更新、搜索、精准推荐、云端控制、地址定位等等多个独立的服务出来。

在 2014 年开始, Docker 容器开始大行其道,虚拟化程度相比较之前的 KVM 有了质的飞越。一个容器镜像就可以将服务所依赖的软件环境全部打包在一起,最小的情况下只要十几 M 就搞定,分发起来非常自由和方便。启动更是秒级就可以启动起来。

业界围绕容器技术又进行了一系列的演化和迭代,逐步演化出了今天的微服务架构。微服务的热度在 2017 年后突然爆发,各大一线互联网公司也纷纷将这一技术引入并在实际业务中落地,腾讯也不例外。

二、腾讯的微服务引擎

很早腾讯内部各个部门就不同程度地开始试水微服务了。在 2020 年又在公司内部将之前的多套微服务框架进行整合,诞生出了现在的以 tPRC 为核心的微服务框架。现在绝大部分的服务和接口几乎都已经切到了基于容器的微服务架构上了。

在腾讯也好,业界也罢。微服务架构虽然在细节的技术选型上会有所差异。但基本上都可以如下一张微服务架构图来表示。

在这个微服务架构中,左右两侧分别都是微服务的基础设施,中间是开发框架。在这些基础组件中,我觉得最重要和核心的就属上图左侧的网关、名字服务北极星、以及配置中心。这也正是腾讯对外的云微服务引擎(Tencent Cloud Service Engine,TSE)所对外开放的能力。

所以接下来我就这三个展开了给大家讲一讲。

2.1 云网关

在单体应用时代,在接入层的做法一般就是申请一个外网域名,然后在接入层按照域名将请求分发到不同的业务服务器上。

在微服务架构中,网关仍然是流量的入口。不过到了微服务时代后,服务的数量比之前要多很多。再也无法直接按照一个域名一个服务的方式进行配置了,而且微服务场景下对路由、监控配置管理等方面的需求更为强烈。

所以这时就需要一个微服务网关,作为所有 API 接口的总入口。网关对后端的微服务进行封装,通过 API 网关统一暴露服务。在网关中提供统一的安全、路由、流控、监控等服务。当有流量到达的时候,网关进行一些预处理后实现根据不同的服务名进行流量的分发。

2.2 服务治理中心

腾讯的服务治理组件叫北极星。该项目最早是腾讯内部开源协同共建的统一名字服务组件,用于解决 RPC 调用的服务注册、动态路由、负载均衡和容错问题。

现在北极星不但部署到了腾讯云上对外提供服务能力,而且还入驻了开源社区。该项目一上线就受到了业界的广泛关注。

Github 地址:https://github.com/polarismesh

该项目不仅仅是把源码全部开源出来了,而且还配置了详细的使用文档。

我接下来给大家介绍一下这个开源项目 Polaris Mesh 解决的问题和所提供的能力。

在微服务架构里,首先要解决的一个问题就是如何找到你要调用的服务。在一家大公司里,可能线上有成千上万个服务同时在运行。那么当你的服务想调用某个服务的时候,如何正确找到对应的服务并进行访问呢?

这个问题就是通过北极星 Polaris Mesh 的服务注册与发现机制来解决。服务提供方在启动时会向 Polaris Mesh 注册自己的服务名以及服务地址。当调用方需要调用的通过在进程内部内嵌的 Proxy 代理先到 Polaris Mesh 获取要调用的服务地址,找到后直接发起调用。

一般情况下服务提供方都是有多个实例的,那么到底该选择哪一个来进行访问呢?有这么两种不同的使用场景。

一种使用场景是分组,比如你的服务调用方和服务提供方可能是多地部署的,在Linux 网络性能的 15 个优化建议! 一文中我们提到过最好是在同机房内部来进行服务调用。要避免跨机房调用。因为这会导致过长的耗时。再比如你可能需要单独部署测试环境,和灰度环境等等。

还有一种应用场景是负载均衡,即使是同环境同机房,可能各个服务提供实例方的 CPU 等配置不一样,也需要合理调度请求流量。

这两种实际应用场景都需要通过合理的路由规则来解决。

我们再聊聊限流。在服务的响应能力里有一个词叫做雪崩。雪崩指的是一种自然现象,雪山上堆积了很多雪,但都还算稳定。但当最后一片雪花落下的时候,整个雪山就崩塌了。服务也存在类似的现象,假如说你的服务每秒可能最大可以正常处理 1000 个请求,但是如果到了 1001 个请求,整个服务将崩溃,连 1 个请求也没办法正常处理了。这就是服务中的雪崩。

那在服务治理中为了杜绝这种现象的产生,就诞生出了一种限流功能。你可以配置某个服务实例的最大处理能力,当超过这个处理能力时后面就不要再过来新的请求了,以保证服务还能正常运行。限流方式有两种,一是快速失败,直接拒绝掉多出来的请求。二是均匀地排队,让服务慢慢地处理。就像地铁站里的限流栏一样。

这两种限流能力在 Polaris Mesh 中都可以非常方便地进行配置。

除了上面的能力以外,Polaris Mesh 还包括熔断规则、访问鉴权、可观测等等特性。在接入方式上不但提供了 Java / Go / C++ / Node.js / PHP 的 SDK 接入,而且还支持 Spring Cloud / gRPC 、服务网格、K8s 服务治理等多种主流客户端。完整的接入方式参见下图:

在使用上,我觉得腾讯云提供的配置工具比我们内部用的还方便。路由规则、熔断规则、限流规则都可以在界面上直接进行配置。用起来非常的方便。

2.3 配置中心

在传统的单体服务时代,配置往往都是写在一个叫配置文件的东东里的。但是到了微服务时代,由于服务数量的爆炸,一大堆的各类配置项,各种不定时的修改需求会让整个工作过程显得混乱不堪。过于分散的配置文件加大了管理的难度。

所以在微服务时代里,配置中心都成为了标配。思路就是把项目中所有参数、开关等配置性的信息,全部都放到一个集中的地方进行统一管理,并提供一套标准的接口。当某个服务需要获取配置的时候,调用接口拉取。当有配置更新的时候,配置中心会通知到各个服务时期动态加载。

在业界,已经有多种常用的解决方案了,包括 Zookeeper、Eureka、Nacos、Consul、Apollo 等等。在腾讯云 TSE 中以上几种主流配置中心解决方案全部都支持,而且对功能进行了增强,提供可视化的控制台、服务管理、日志、监控、告警、鉴权等一系列原方案所不具备的功能。

在部署上,不再需要自己的运维团队进行部署。一键就可以部署出支持多活、持久化等高可用的配置中心集群。

在可视化的控制台中,可以非常方便地对配置中心进行数据管理、日志查看、运行监控等日常操作。

北极星 Github 地址:https://github.com/polarismesh

2.4 开发框架

对于 Java 开发者来说,还可以直接使用 Spring Cloud Tencet 开发框架。该框架实现了Spring Cloud 标准微服务 SPI,它依托北极星 polaris,实现各种分布式微服务场景。

Spring Cloud Tencent 所有组件都已上传到 Maven 中央仓库,只需要引入依赖即可。

Spring Cloud Tencent:https://github.com/Tencent/spring-cloud-tencent/

三、总结

微服务架构是目前比较流行的技术。搭建一套微服务基础架构往往需要组装一系列的微服务中间件,例如服务注册中心、配置中心、日志中心等等。这个初期的成本投入是很高的。一般大公司有有专门的人力和财力来搭建微服务所需要的这些基础轮子。

对于中小公司,甚至是个人开发者来说,如果全盘从 0 自己部署微服务所依赖的这些基础组件,光是部署就足够折腾好久的了。而且微服务中还存在多种技术选型,比如配置中心就有 Zookeeper、Eureka、Nacos、Consul、Apollo 等很多种。学习和运维难度都比传统的开发模式要复杂的多。

但是作为中小公司或者个人开发者来说,如果不接触微服务架构又会慢慢地与时代脱节。好在现在公有云厂商都提供了微服务基础设施。我在 Techo Day 上体验下来的感觉,就是太方便了,开箱即用。

回想起我刚开始折腾 Zookeeper、Consul 的时候,光编译和安装就浪费了很多时间。现在一键部署就能使用,实在很方便。而且我感觉腾讯对外的产品使用体验上的打磨做的更好,其实很多地方比我们内部的工具用起来都好用。

我今天也想要凡尔赛一次,原来大厂的面试也没有想象中的那么难,字节跳动 3 面+腾讯 6 面,就这么一次性过了 写在开头的闲言碎语 2021 年过去了大半,对很多人来说,这一年经历了太多太多,可能是十年来记忆里比较浓墨重彩的一笔。过去的一年里,“熬”算是这个阶段我的关键字,确实太多时候就要放弃,好在自己“熬”过去了,我收获了心仪的 offer。 简单来说,就如标题一样,我今天也想要凡尔赛一次,原来大厂的面试也没有想象中的那么难,字节跳动 3 面+腾讯 6 面,就这么一次性过了,下面就细细聊聊我的大厂面经吧,希望能够给金九银十要面试的朋友提供一些经验。 PART1:字节跳动 3 轮面试场景重现 ——字节 阅读详情

相关推荐

我也凡尔赛一次,字节3面+腾讯6面我一次就过,和大家谈谈我的大厂面经

写在开头的闲言碎语 2020年过去了,对很多人来说,这一年经历了太多太多,可能是十年来记忆里比较浓墨重彩的一笔。过去的一年里,“熬”算是这个阶段我的关键字,确实太多时候就要放弃,好在自己“熬”过去了,在新的2021年里,也有个一个非常好的开端,我收获了心仪的offer。 简单来说,就如标题一样,我今天也想要凡尔赛一次,原来大厂的面试也没有想象中的那么难,字节跳动3面+腾讯6面,就这么一次性过了,下面就细细聊聊我的大厂面经吧,希望能够给金三银四要面试的朋友提供一些经验。 PART1:字节跳动3轮

gp0001111的博客 2324

标准lims系统有哪些核心功能模块

通过实验室信息化管理系统的建设,以实现对各检验中心实验室的资源、检验检测业务工作流程、质量管控、技术支持、客户服务及数据查询与统计等实行统筹管理。青软青之主导产品Kings-LIMS率先采用微服务架构,通过模块配置实现全面自定义和快速部署,为实验室提供符合CNAS/CMA/ISO17025的透明工作流程和资源管理,提高效率,降低成本。 丰富多样的产品功能如业务受理、客户管理、协议管理、费用管理、样品管理(样品登记、样品入库、领取、返样、退样、处置、样品跟踪查询、样品统计查询)、合同评审、检测任务分派、检测

qq_42709233的博客 1026

YOLOV8主干改进方法:C2f-Dual——DualConv轻量化双卷积设计(附改进代码)

DualConv是一种创新的卷积网络结构,旨在构建轻量级的深度神经网络。它通过结合3×3和1×1的卷积核处理相同的输入特征映射通道,优化了信息处理和特征提取。DualConv利用组卷积技术高效排列卷积滤波器,大大降低了计算成本和参数数量。

m0_74890428的博客 4700

阿里巴巴、百度、美团都在用的 Spring Cloud 微服务架构!

又是跟技术战斗的一天!后台都是在问微服务架构的面试题怎么答,想聊聊微服务架构了。微服务架构一跃成为 IT 领域炙手可热的话题也就这两年的事,大量一线互联网公司因为庞大的业务体量和业务需求...

Java技术栈,分享最主流的Java技术 1357

Qwen2.5-VL模型微调实战:从零到部署的完整流程(附避坑指南)

本文详细介绍了Qwen2.5-VL视觉语言模型从零开始的完整微调与部署流程。内容涵盖使用LLaMA-Factory进行LoRA微调的关键参数配置与避坑指南,以及如何将训练好的模型权重合并,并最终利用vLLM高性能推理引擎进行部署,为开发者提供了一套可落地的实战方案。

oo7890的博客 592

EB TRESOS 29.0.0安装教程用于MCAL配置开发

本文介绍的搭建基于NXP官网提供EB软件,进行基于标准AUTOSAR软件底层驱动配置的开发

qq_53260940的博客 1877

polaris(北极星)——腾讯开源服务治理

北极星介绍 github地址c++版

qq_28107929的博客 2007

基于YOLOv8的多类别检测模型融合实战:从数据集重构到模型训练

本文详细介绍了如何将多个单一类别的YOLOv8检测模型融合为一个高效的多类别检测模型。通过重构数据集、利用预训练模型生成新标签,并重新训练,解决了多模型并行带来的速度慢、资源占用高和部署复杂等问题。实战流程涵盖数据准备、标签生成、模型训练与评估,旨在帮助开发者构建性能优异的YOLOv8多类别检测模型。

kmeans3miner的博客 227

腾讯云开源百万级服务发现和治理中心“北极星”,打造可持续微服务生态

11月4日,在腾讯数字生态大会上,腾讯重磅宣布并介绍了云原生领域的开源组件——“北极星”(PolarisMesh)服务发现和治理中心。“北极星”由腾讯云自主研发,在腾讯内部注册服务数量已...

腾讯开源 718

Claude Code 实战指南:用 AI 玩转终端编程,效率狂飙!

本文介绍了终端 AI 代理工具 Claude Code,涵盖常用命令、使用方法(如 init 初始化、权限配置、工作流程、上下文管理)、MCP 扩展工具及实战案例,展示其通过自然语言辅助开发的高效性与实用性。

个人技术 1万+

【数据集】2019年中国1km格网河网密度数据集

中国1km格网河网密度数据集

WW、forever的博客 1344

上手报告|今天聊聊腾讯目前在用的微服务架构!

大家好,我是飞哥!自从去年 10 月份搜狗正式被腾讯合并以后,我一直想给大家讲讲腾讯内部目前开发在用的一些技术栈,我想这对同学们有很高的学习价值。但苦于公司内部有明确的规定,不允许私自对外分享和发布未经公开的信息。一经发现,高压线开除处理!所以一直迟迟都没有动手。最近我在腾讯的 TechoDay 技术开放日活动中了解到内部在使用的微服务核心北极星(Polaris-Mesh...

zhangyanfei01的专栏 1031

利用CAT12做皮层指标的统计分析及可视化笔记记录

利用CAT12做皮层指标的统计分析及可视化 文章目录利用CAT12做皮层指标的统计分析及可视化前言一、统计步骤1.Basic Models2.Estimate Surface Models3.Results二、可视化1.t值可视化2.p值可视化 前言 本来没有打算做SBM的,因为自己是新手小白,许多操作都不太懂,但最后还是打算做一下,于是就从上周末开始将很久之前跑VBM得到的surf文件夹中的数据捡起来继续做皮层分析,因为之前看了一个博主的博客,关于如何做SBM已经讲得非常清楚了,但是在统计及可视化这里,我

weixin_52073820的博客 8094

以腾讯开源的Tars为例谈谈微服务

文章目录现实中的问题单体架构的问题多体架构的问题全栈的问题微服务框架—TarsTars是什么有哪些成果设计思想整体架构服务交互流程图微服务不是银弹 软件行业发展到现在,很多人都曾被大而全的产品折腾得苦不堪言。因此,近些年云原生(Cloud Native)的概念也渐渐扩散开来。作为云原生基础设施之一的"微服务"也备受瞩目。那什么是微服务,微服务又解决了哪些问题呢?今天小编以腾讯的开源微服务框架Tar...

1027

YOLOv11官方代码库与预训练模型下载:介绍Ultralytics官方GitHub及模型权重(yolov11n.pt, yolov11s.pt等)

本文介绍了Ultralytics官方GitHub仓库和YOLOv11预训练模型。Ultralytics仓库是YOLO系列算法的官方实现,包含YOLOv11最新代码、预训练模型、文档和工具。仓库采用清晰的代码结构和活跃的更新策略,支持全流程开发。YOLOv11提供了5种不同规模的模型变体(YOLOv11n/s/m/l/x),在精度、速度和模型大小间权衡,适用于从移动设备到高精度检测等不同场景。各模型在COCO数据集上预训练,可直接使用或微调,满足多样化应用需求。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 5830

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

架构设计内容分享(一百六十五):聊聊微服务架构中的多级缓存设计

今天我们来聊聊缓存这个话题,看看在微服务环境下如何设计有效的多级缓存架构。主要涉及三方面内容:Web 应用的客户端缓存;应用层静态资源缓存;服务层多级缓存。首先,咱们先讲解微服务架构的多级缓存设计。提到缓存,想必每一位软件工程师都不陌生,它是目前架构设计中提高性能最直接的方式。这里我们举个例子:Redis 缓存假设应用程序将原始数据存储在 MySQL 数据库中。

之乎者也·的博客 3631

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

聊聊微服务架构中的多级缓存设计

大家好,我是不才陈某~今天我们来聊聊缓存这个话题,看看在微服务环境下如何设计有效的多级缓存架构。主要涉及三方面内容:Web 应用的客户端缓存;应用层静态资源缓存;服务层多级缓存。首先,咱们先讲解微服务架构的多级缓存设计。微服务架构中的多级缓存设计提到缓存,想必每一位软件工程师都不陌生,它是目前架构设计中提高性能最直接的方式。这里我们举个例子:Redis 缓存假设应用程序将原始数据存储在 MySQL...

码猿技术专栏 293

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

聊聊微服务架构中的多级缓存设计(建议收藏)

今天我们来聊聊缓存这个话题,看看在微服务环境下如何设计有效的多级缓存架构。主要涉及三方面内容:Web 应用的客户端缓存;应用层静态资源缓存;服务层多级缓存。首先,咱们先讲解微服务架构的多级缓存设计。

csdn1234561231的博客 584

阿里P9:做了6年架构设计,这次聊聊微服务与分布式事务细节

微服务因其高内聚、低耦合、高扩展、敏捷开发为很多企业所用,当然,没有任何一项技术是完美的。系统微服务化后,一个看似简单的功能,内部可能需要调用多个服务并操作多个数据库实现。毫不夸张地说,...

JAVA高级架构 640

微服务架构中常用的多级缓存设计,建议收藏!

今天我们来聊聊缓存这个话题,看看在微服务环境下如何设计有效的多级缓存架构。主要涉及三方面内容:Web 应用的客户端缓存;应用层静态资源缓存;服务层多级缓存。首先,咱们先讲解微服务架构的多级缓存设计。

Wewe的博客 1188

一路披荆斩棘腾讯6面面经(已拿offer)大厂远没想象中的难

最后想说的是,大厂面试远没有我们想的那么困难,摆好心态,做好准备,你也可以的。另外,面试中遇到不会的问题不妨尝试讲讲自己的思路,因为有些问题不是考察我们的编程能力,而是逻辑思维表达能力;最后平时要进行自我分析与评价,做好职业规划,不断摸索,提高自己的编程能力和抽象思维能力。以上文章中,提及到的所有的笔记内容、面试题等资料,均可以免费分享给大家学习,由于资料内容太多,平台篇幅限制,小编就展现了以上部分面试专题与资料,如需获取以下全部面试资料,可以点击文末下方传送门,即可免费获取!

jjc4261的博客 2105

大厂的面试也没有想象中的那么难,字节跳动3面+腾讯6面,就这么一次性过了

写在开头的闲言碎语 2020年过去了,对很多人来说,这一年经历了太多太多,可能是十年来记忆里比较浓墨重彩的一笔。过去的一年里,“熬”算是这个阶段我的关键字,确实太多时候就要放弃,好在自己“熬”过去了,在新的2021年里,也有个一个非常好的开端,我收获了心仪的offer。 简单来说,就如标题一样,我今天也想要凡尔赛一次,原来大厂的面试也没有想象中的那么难,字节跳动3面+腾讯6面,就这么一次性过了,下面就细细聊聊我的大厂面经吧,希望能够给金三银四要面试的朋友提供一些经验。 PART1:字节跳动3.

Java0258的博客 1787

深入云原生:解析 Docker 容器、Serverless 计算和微服务架构的实战应用

今天我想跟大家聊聊云计算的一些新潮玩意儿,我对云计算领域的一些前沿技术本身就特别感兴趣,比如 Docker 容器、Serverless 计算、微服务架构以及云原生架构。这些技术在数字化浪潮中扮演着重要角色,不仅改变了软件开发和部署的方式,还大大提高了企业的运营效率和市场响应速度。特别是最近看了《2023腾讯云容器和函数计算技术实践精选集》,里面汇集了行业顶尖专家们如何应对挑战、实现创新的经验。

我在山城重庆,我希望能为这片软件沙漠地带贡献自己的一滴水,Stay tuned! 5310

字节跳动 3 面+腾讯 6 面,就这么一次性过了,下面就细细聊聊我的大厂面经吧

写在开头的闲言碎语 2020 年过去了,对很多人来说,这一年经历了太多太多,可能是十年来记忆里比较浓墨重彩的一笔。过去的一年里,“熬”算是这个阶段我的关键字,确实太多时候就要放弃,好在自己“熬”过去了,在新的 2021 年里,也有个一个非常好的开端,我收获了心仪的 offer。 简单来说,就如标题一样,我今天也想要凡尔赛一次,原来大厂的面试也没有想象中的那么难,字节跳动 3 面+腾讯 6 面,就这么一次性过了,下面就细细聊聊我的大厂面经吧,希望能够给金三银四要面试的朋友提供一些经验。 PAR.

m0_50180963的博客 595
上一篇: 吃透Github上星标98.7k的性能优化方案优解,成功入职美团
下一篇: SpringBoot 接口数据加解密实战
跟着我学Java
博客等级 码龄6年 660粉丝 1341原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值