.NET Core

Kubernetes 在知名互联网公司的(dotnet)落地实践

孤者浪人 提交于 2020-10-12 03:43:30
容器化背景 本来生活网( benlai.com )是一家生鲜电商平台,公司很早就停止了烧钱模式,开始追求盈利。既然要把利润最大化,那就要开源节流,作为技术可以在省钱的方面想想办法 。我们的生产环境是由 IDC 机房的 100 多台物理机所组成,占用率高达 95%,闲置资源比较多,于是我们考虑借助 k8s 来重构我们的基础设施,提高我们资源的利用率。 容器化项目团队最初加上我就只有三个人,同时我们还有各自的工作任务要做,留给容器化的时间较少,因此我们要考虑如何快速的搭建容器平台,避免走全部自研这条路,这对我们来说是个巨大的挑战。在经历了一年的容器化之旅后,分享下我们这一年所踩过的坑和获得的经验。 面临的问题 在搭建 k8s 集群前,有很多问题摆在我们面前: l 人手不足,时间也不充裕,不能有太多自研的需求 l 我们目前的发布是由测试人员完成的,不可能要求他们去写一个 yaml 或执行 kubectl 做发布,这个学习成本太高也容易出错,因此我们必须构建一个用户体验良好的可视化平台给发布人员使用 l 我们有大量的 .NET 项目,而 .NET 环境又依赖 Windows l ConfigMap/Secret 不支持版本控制,同时用来存业务配置也不是很方便 l k8s 集群和外部的通信如何打通 容器平台 作为小团队去构建一个容器平台,自研的工作量太大了。前期我们调研过很多可视化平台,比如

了解.NET Core代码保护工具.NET Reactor内置工具,让你的工作效率猛增!

安稳与你 提交于 2020-10-10 00:29:51
.NET Reactor 是一个功能强大的代码保护和软件许可系统,适用于为.NET Framework编写的软件,并支持生成.NET程序集的所有语言。 .NET Reactor迎来了久违的版本更新,进入v6.3.0.0全新时代!支持Blazor保护,支持.NET 5 Preview 4保护,允许创建.NET Core 3.x单个文件应用程序,改进了许多功能性能,等等10个功能的更新和改进,还没有体验的朋友可 立即下载 。 本文将介绍.NET Reactor的内置工具,希望对您有所帮助。 许可证审查员工具 许可证检查器允许您从打开的许可证文件中查看其他许可证信息。为此,您必须通过选择生成受保护程序集和许可证的.NET Reactor项目来加载正确的主密钥。 可以使用.NET Reactor SDK以编程方式读取许可证信息(随.NET Reactor一起提供,请参见位置“ ... Eziriz \ .NET Reactor \ SDK \ License Examination”)。 许可证失效工具 如果部署硬件标识锁,则可以使用许可证无效工具强制在一台计算机上使许可证无效,以允许被许可方将安装移动到另一台计算机上。 要强制执行无效操作,请加载.NET Reactor项目,打开许可证无效工具,然后单击“创建无效工具”。这将创建一个可执行文件

体验.NET5 RC1极致性能,你也要“卧槽”!

梦想与她 提交于 2020-10-09 11:25:10
“ 9月14日,.NET5发布了(Release Candidate)RC1版本,是11月正式版本之前两个RC版本中第一个,包含语言新版本C#9和F#5,需要用Visual Studio 2019 (v16.8, Preview 3)才能使用,注意不是Visual Studio 2019,二者可以并存安装。 ” 文:Yiru-Chen 来源:DotNetdaily (文章底部附安装包和激活码) 相对于.NET Core3.x,做出了很多改进: 1 单文件可执行应用程序 2 更小的容器映像 3 更强大的JsonSerializer api 4 BCL nullable reference type annotated 5 新target framework names, 6 对Windows ARM64更好的支持。 其中最被人称道的是.NET5里面GC和JIT性能大幅提升,ARM64重点性能优化带来了更好的吞吐量和更小的二进制文件,对容器技术更好的支持,远远领先于其他平台语言!怀揣着憧憬与好奇,我准备动手实践下,数据说话!动手前,先展望一下。 DotNetdaily .NET5,完成统一 微软2019全球开发者大会上正式宣布的.NET5,其主要目标之一是提供一个单一的、跨平台的.NET 运行时和具有统一运行时行为和开发者体验的框架。在第一次宣布这个项目时,.NET 团队的程序经理

.NET Core HttpClient源码探究

早过忘川 提交于 2020-10-09 00:34:40
前言 在之前的文章我们介绍过HttpClient相关的服务发现,确实HttpClient是目前.NET Core进行Http网络编程的的主要手段。在之前的介绍中也看到了,我们使用了一个很重要的抽象HttpMessageHandler,接下来我们就探究一下HttpClient源码,并找寻它和HttpMessageHandler的关系究竟是怎么样的。 HttpClient源码解析 首先我们找到 HttpClient源码 的位置,微软也提供了专门的网站可以查找 .Net Core源码 有兴趣的同学可以自行查阅。接下来我们查阅一下HttpClient的核心代码。首先,我们可以看到HttpClient继承自HttpMessageInvoker这个类,待会我们在探究这个类。 public class HttpClient : HttpMessageInvoker { } 然后我们看下几个核心的构造函数 public HttpClient() : this(new HttpClientHandler()) { } public HttpClient(HttpMessageHandler handler) : this(handler, true) { } public HttpClient(HttpMessageHandler handler, bool disposeHandler) :

消息队列 Kafka 的基本知识及 .NET Core 客户端

倾然丶 夕夏残阳落幕 提交于 2020-10-08 03:29:59
前言 最新项目中要用到消息队列来做消息的传输,之所以选着 Kafka 是因为要配合其他 java 项目中,所以就对 Kafka 了解了一下,也算是做个笔记吧。 本篇不谈论 Kafka 和其他的一些消息队列的区别,包括性能及其使用方式。 简介 Kafka 是一个实现了分布式的、具有分区、以及复制的日志的一个服务。它通过一套独特的设计提供了消息系统中间件的功能。它是一种发布订阅功能的消息系统。 一些名词 如果要使用 Kafka ,那么在 Kafka 中有一些名词需要知道,文本不讨论这些名词是否在其他消息队列中具有相同的含义。所有名词均是针对于 Kafka。 Message 消息,就是要发送的内容,一般包装成一个消息对象。 Topic 通俗来讲的话,就是放置“消息”的地方,也就是说消息投递的一个容器。假如把消息看作是信封的话,那么 Topic 就是一个邮筒,如下图所示: Partition && Log Partition 分区,可以理解为一个逻辑上的分区,像是我们电脑的磁盘 C:, D:, E: 盘一样, Kafka 为每个分区维护着一份日志Log文件。 每个分区是一个有序的,不可修改的,消息组成的队列。 当消息过来的时候,会被追加到日志文件中,这个追加是根据 commit 命令来执行的。 分区中的每一条消息都有一个编号,叫做 offset id,这个 id 在当前分区中是唯一的

Java Spring Boot VS .NetCore (十一)自定义标签 Java Tag Freemarker VS .NetCore Tag TagHelper

◇◆丶佛笑我妖孽 提交于 2020-10-08 03:13:00
这章介绍下 自定义标签,都知道在处理权限操作的时候,除了后台代码中处理,对于界面上没有权限的人员对于的权限按钮也不会显示 这一点无论是Java 还是.NetCore 也是有很多共同点 Java Freemarker 处理 首先来配置下Freemarker的代码,来设置按钮的显示 隐藏 @Configuration public class FreeMarkerConfig { @Autowired private freemarker.template.Configuration configuration; @PostConstruct public void setSharedVariable() { try { configuration.setSharedVariable( "freemark", new MyTags()); } catch (Exception e) { e.printStackTrace(); } } } 下面看下MyTags是什么? public class MyTags extends SimpleHash { public MyTags() { put( "hasRole", new RoleTag()); } } 自定义的Tag标签需要继承 SecureTag 这个基类,然后在渲染方法 render处理下就ok public abstract

.NetCore学习笔记:六、Swagger API接口文档工具

此生再无相见时 提交于 2020-10-07 04:39:02
Swagger一个优秀的Api接口文档生成工具。Swagger可以可以动态生成Api接口文档,有效的降低前后端人员关于Api接口的沟通成本,促进项目高效开发。 1、使用NuGet安装最新的包:Swashbuckle.AspNetCore。 2、编辑项目文件(NetCoreTemplate.Web.csproj),配置Xml文档生成目录。 < PropertyGroup Condition ="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'" > < DocumentationFile > bin\Debug\netcoreapp3.1\NetCoreTemplate.Web.xml </ DocumentationFile > < OutputPath > bin\Debug\netcoreapp3.1\ </ OutputPath > </ PropertyGroup > < PropertyGroup Condition ="'$(Configuration)|$(Platform)'=='Release|AnyCPU'" > < DocumentationFile > bin\Release\netcoreapp3.1\NetCoreTemplate.Web.xml </ DocumentationFile > <

.NET Core 3 WPF MVVM框架 Prism系列之对话框服务

穿精又带淫゛_ 提交于 2020-10-07 03:43:48
 本文将介绍如何在.NET Core3环境下使用MVVM框架Prism的对话框服务,这也是prism系列的最后一篇完结文章,下面是Prism系列文章的索引: .NET Core 3 WPF MVVM框架 Prism系列之文章索引 一.对话框服务 在Prism中,通过一个 IDialogAware 接口来实现对话框服务: public interface IDialogAware { bool CanCloseDialog(); void OnDialogClosed(); void OnDialogOpened(IDialogParameters parameters); string Title { get; set; } event Action<IDialogResult> RequestClose; } CanCloseDialog()函数是决定窗体是否关闭 OnDialogClosed()函数是窗体关闭时触发,触发条件取决于CanCloseDialog()函数 OnDialogOpened()函数时窗体打开时触发,比窗体Loaded事件早触发 Title为窗体的标题 RequestClose为关闭事件,可由此控制窗体的关闭 1.创建对话框的View和ViewModel AlertDialog.xaml: <UserControl x:Class=

.net core快速开发平台,learun自主工作流引擎设计规范

你。 提交于 2020-10-06 08:21:19
一个完整的工作流管理系统通常由工作流引擎、工作流设计器、流程操作、工作流客户界面、流程监控、表单设计器、与表单的集成以及与应用程序的集成等几个部分组成。 1.工作流引擎 工作流引擎是工作流管理系统的核心部分,主要提供了对工作流定义的解析以及流程流转的支持。工作流定义文件描述了业务的交互逻辑,工作流引擎通过解析此工作流定义文件按照业务的交互逻辑进行业务的流转,工作流引擎通常通过参考某种模型来进行设计,通过调度算法来进行流程的流转(流程的启动、终止、挂起、恢复等),通过各种环节调度算法(SPLIT、AND、OR等)来实现对于环节的流转(环节的合并、分叉、选择、条件性的选择等)。 2.工作流设计器 工作流设计器为可视化的流程设计工具,用户通过拖放等方式来绘制流程,并通过对于环节的配置来实现环节操作、环节表单、环节参与者的配置。工作流设计器为用户以及开发商提供了快速绘制、修改流程的方式,工作流设计器的好坏决定到工作流管理系统的易用性。 3.流程操作 流程操作指所支持的对于流程环节的操作,如启动流程、终止流程、挂起流程、直流、分流(单人办理)、并流(多人同时办理)、联审等,象这些流程操作都是可直接基于引擎所提供的环节调度算法来直接支持的,而在实际的需求中,通常需要自由的对于流程进行干涉,如取回、回退、跳转、追加、传阅、传阅办理等,而这些流程操作对于工作流引擎来说是不合理的

Java Spring Boot VS .NetCore (十) Java Interceptor vs .NetCore Interceptor

浪子不回头ぞ 提交于 2020-10-06 00:47:34
这篇主要说下拦截器的处理,这里就说下org.springframework.web.servlet 下的HandlerInterceptor Java Interceptor 通过HandlerInterceptor类来看下代码 public interface HandlerInterceptor { boolean preHandle(HttpServletRequest var1, HttpServletResponse var2, Object var3) throws Exception; void postHandle(HttpServletRequest var1, HttpServletResponse var2, Object var3, ModelAndView var4) throws Exception; void afterCompletion(HttpServletRequest var1, HttpServletResponse var2, Object var3, Exception var4) throws Exception; } 拦截器的处理就在,三个方法的意思一看就明白,也不做过多介绍 那么在代码中我们怎么来处理这些呢? 这里又要结合前面的章节 Filter 接口在处理了,对什么进行拦截