15年开发架构经验,熟悉Java .NET,3次微软MVP
朱晔的互联网架构实践心得S1E5:不断耕耘的基础中间件 【下载本文PDF进行阅读】 一般而言中间件和框架的区别是,中间件是独立运行的用于处理某项专门业务的CS程序,会有配套的客户端和服务端,框架虽然也是处理某个专门业务的但是它不是独立程序,是寄宿在宿主程序进程内的一套类库。
朱晔的互联网架构实践心得S1E4:简单好用的监控六兄弟 【下载本文PDF进行阅读】 这里所说的六兄弟只指ELK套件(ElasticSearch+Logstash+Kibana)以及TIG套件(Telegraf+InfluxDb+Grafana)。
朱晔的互联网架构实践心得S1E3:相辅相成的存储五件套 【下载本文PDF进行阅读】 这里所说的五件套是指关系型数据库、索引型数据库、时序型数据库、文档型数据库和缓存型数据库。 上图显示了一套读写服务搭配这五种类型数据库的例子: 1. 这里只是说明了我们可以这么来搭配这些类型的数据库,不是说我们所有的应用都需要用到这些类型的数据库。
朱晔的互联网架构实践心得S1E2:屡试不爽的架构三马车 【下载本文PDF进行阅读】 这里所说的三架马车是指微服务、消息队列和定时任务。如下图所示,这里是一个三驾马车共同驱动的一个立体的互联网项目的架构。
技术学习要兼顾深度和广度 夯实技术基础 这么多年来,我面试了很多人。我越发感到「技术基础」非常重要。 很多技术的本质是一样的。技术基础足够好的话,学东西可以非常快。往下到操作系统层面,甚至计算机硬件层面,你会发现,编程语言特性和虚拟机特性不再重要。
现在AI越来越火,其实很多东西真正懂了原理并不是这么高大上 这里给一个手动打造的简单神经网络做手写识别的例子 代码见 链接: https://pan.baidu.com/s/1boHxuCB 密码: dmch(里面包含了Notebook以及需要的图片数据,文件比较大,只能传网盘。
虽然很多人已经使用了JDK8,看到不少代码,貌似大家对于Java语言or SDK的使用看起来还是停留在7甚至6。 Java8在流式 or 链式处理,并发 or 并行方面增强了很多,函数式的风格使代码可读性更高 。
之前做的一个PPT,分享给博客园的同学。 下载地址: 学技术练英语.pdf 技术是靠自己去学的,学技术不能仅仅是看书看博客,最好是有实践,不管是做实验去验证,还是写各种代码去玩各种特性,还是造轮子都是非常好的学习方法。
在这里分享一些之前对某网站会员/用户系统(一般域名都是passport.xx.com)进行漏洞检查查出的一些问题,这些问题大多都是逻辑类漏洞,利用漏洞进行攻击并不需要什么高深的技术能力,所以危害尤其大,把相关经验分享给大家希望大家可以自查。
模式 接下来去聊一聊框架设计中的一些常见设计模式,这和传统的一些设计模式不同(之前写过 无废话C#设计模式系列文章,有兴趣的读者可以去看一下),这里聊的一些设计模式是比较高层的粗粒度的架构设计模式,主要是用于之前说的构建框架的龙骨,使得框架中的几百个类型可以有结构有条理组织在一起,在这些模式之中你完全可以再去使用各种Gof设计模式,这是不冲突的。
【原创】如何写一个框架:步骤(上) 说明:写本文的时候作者完全是把脑子里的东西写了出来,没有参考任何的资料,所以对于每一项内容可能都是不完整的,不能作为一个完整的参考。有一些方法学的东西每个人都有自己的喜好,没有觉得的对和错。
说明:作者也没写过什么框架,只是分享一些自己的理解,抛砖引玉罢了。如果你写过一些框架可能会产生一些共鸣欢迎讨论,如果你正在写或正打算写一个框架可能会给你一些启发。本文以为较长可能会分多个篇博客来写,现在能想到的是主要分为步骤、模式两部分。
回到索引 http://www.cnblogs.com/lovecindywang/archive/2012/12/23/2829828.html 性能层面: 性能分析 我觉得性能分析的话要注意几个要点: 不要去猜:对于自己写的代码你是否知道你的代码要执行多久,是不是还在用时间相减来测试代码执行时间?现在有很多自动化的工具可以在程序运行的时候,测试代码中每一句语句的执行时间,可以有效分析出代码的性能瓶颈。
回到索引 http://www.cnblogs.com/lovecindywang/archive/2012/12/23/2829828.html 设计层面: 分层架构 分层架构是项目设计中很重要的一点,从根本的目的上来说就是为了职责的分离。
回到索引 http://www.cnblogs.com/lovecindywang/archive/2012/12/23/2829828.html 架构层面: 日志集中 所谓日志集中就是把程序的所有日志和异常信息的记录都汇总到一起,在只有一台服务器的时候我们记录本地文件问题也不是最大,但是在负载均衡环境下再记录本地日志的话就出现问题了。
回到索引 http://www.cnblogs.com/lovecindywang/archive/2012/12/23/2829828.html 安全层面: SQL注入 SQL注入是一个古老的安全问题,现在任何程序都不应该再出现这样的问题了,其原理非常简单,在过去大多数程序都是直肠子通数据库的,因此如果拼接SQL并且在参数上没有做好过滤或者没有使用参数形式来生成SQL语句的话可能会导致用户在页面上输入的恶意代码直接在数据库中执行。
回到索引 http://www.cnblogs.com/lovecindywang/archive/2012/12/23/2829828.html 语言层面: 运行时元数据获取 所谓运行时元数据获取也就是在程序运行的时候通过代码动态获得类型、方法、属性的信息,然后可以动态获得属性的值,执行方法等等,在有的语言中称为反射。
下面是一些个人架构上的总结,本来想只在公司内部进行共享的,因此内容写的口语化一点,也没什么图示,所有内容没有查任何资料是脑子里面的东西吐出来的因此可能会不准确不全,希望抛砖引玉,大家互相讨论。 要注意,我这些文章是一个总体的架构经验不针对具体的语言和平台,因此也不一定是适用所有的语言和平台的。
回到索引 http://www.cnblogs.com/lovecindywang/archive/2012/12/23/2829828.html 系统层面: 高可用性 所谓高可用性也就是通过避免单独故障加上快速故障转移实现一旦某台物理服务器出现故障能实现故障快速恢复。
招聘后端(Java、Php)前端、数据库等各类人才(开发经理、架构师、开发、DBA) (四)大学的时候 接上文。在大学的时候有各种各样的社团,出于对做网站的喜欢,当时加入了一个网络社团,想学学做网站的东西,当时对社团里面会动态语言做asp网站的人钦佩的不得了,于是回家买了一本asp的书: 我真正的启蒙书,当时我室友也是会一点html和静态网站的,他看了我学asp就说你不要尝试了,这个很难学的学不会的。
招聘后端(Java、Php)前端、数据库等各类人才(开发经理、架构师、开发、DBA) 小的时候有写日记的习惯,不是自己要写而是为了完成任务,后来发现写日记确实也是可以培养语言表达能力的。上了高中之后除了作业就很少写东西了,趁着这几天休息想写一下我使用电脑、学习技术的历程。
经过4天的开发,ios的网络书店基本完成了: 登陆注册 图书列表,下拉放开刷新,下拉到底查看更多,图片异步加载 我的信息,查看订单修改密码 查看图书详情 加入购物车 提交订单 sqllite存放浏览日志,定时提交 plist文件存放购物车 架构中最重要的元素: 模块...
带链接的完整版本: http://files.cnblogs.com/lovecindywang/.net.pdf http://files.cnblogs.com/lovecindywang/j2ee.pdf 开源和非开源(当然,现在微软很多产品也开源了)平台的很大不同在于: 开源的好东西确实是多,但质量也是参差参差不齐的,各个不同产品在不同版本的兼容性也是问题。
最近转了部门负责移动开发,自从接触了iOS之后,也成了一个果粉,喜欢苹果的iPad、iPhone也喜欢MacOS,iOS虽然封闭但非常吸引我,我感觉苹果的每一个细节都很完美,ObjectiveC语言也很简单实用,准备系统学习一下然后在这里写点自己的心得分享给大家。
ASP.NET MVC和WCF真是微软两个很棒的框架,设计的很好,可扩展性非常强,到处都是横切、管道。 以前写过一篇MVC流程的文章,http://www.cnblogs.com/lovecindywang/archive/2010/12/02/1894740.html主要是使用了MVC的各种扩展。
原文地址:http://www.25hoursaday.com/CsharpVsJava.html 6、集合 许多有名的编程语言都会包含一个集合框架,框架一般由各种用于保存数据的数据结构和配套的操作对象的算法构成。
原文地址:http://www.25hoursaday.com/CsharpVsJava.html 简介 C#语言是一门面向对象的语言,开发者可以使用C#和微软.NET平台快速构建各种应用程序。
虽然有很多开源工具通过插件或其它方式可以监测这些开源组件提供的内在性能(所谓内在性能就是这些开源组件提供的类STAT命令获取到的数据),但是不管是部署还是扩展都很麻烦,其实花1-2天时间完全可以实现一个这样的工具,并且扩展起来也很方便。
一个比较成规模的系统,很多东西依赖官方组件不能满足定制、灵活、性能、监控的要求,需要开发哪些东西?略微整理了一下,这也是我们的目标。 宗旨: 1)自己的组件需要处处体现集中配置、集中日志、内置性能监视器、集中监控、自动部署等理念! 2)考虑分期,先实现必要的东西,尽量轻量化,微软搞的东西很容易太重! 3)尽量考虑不依赖硬件的横向扩展! 4)分布式分布式说白了很多时候是对用户来说是集中的单点的,在后端是分布式的用于承载大量数据和大量请求! 5)分布式要解决的问题?同步、路由、负载均衡、可用性检测、数据迁移、性能、治理。
Q:Mongodb数据服务有什么用? A:首先,Mongodb适合保存大量的非业务数据,因此,Adhesive框架提倡把不是非常重要的非业务数据(比如应用程序信息中心的日志、异常、状态数据,又比如WCF扩展模块的WCF调用数据,或者其它的各种业务日志、监控日志)保存在Mongodb中。
框架除了报警之外还提供了简单的报警处理流程。 先来看一下报警相关的配置: 比如这里有一个报警,30秒检查一次30秒内相关数据如果超过10条则报警。 在报警后,系统会自动创建一个事件,相关人员登录到后台可以看到这个事件并进行处理,如果事件在处理了,那么报警会暂停,一直到处理完成之后重新开启。
有一个很常见的功能,我们需要在一个子窗口中定时调用服务,然后更新控件的内容,只要窗口开着就一直会调用服务。 那么现在就来完成这个功能,首先定义一个服务: public class Service1 : IService1 { public string DoWork(string name) { File.
应用程序信息中心模块提供了日志、异常、性能、状态四大服务。来看一下最新的日志服务定义: void Debug(string message); void Debug(string moduleName, string message); ...
在测试Adhesive的时候发现,使用过一段时间后台之后,就会不能连接到数据库,查看日志发现报的错误大致是 connection refused because too many open connections: 819 通过mongostat查看连接数的确很夸张有近819个连接,尝试在启动的...
在本文中我们会着重介绍一下Mongodb数据服务查询部分的实现,也就是通用后台用到的查询服务。 首先,为了性能考虑,我们的每一个Mongodb集群都可以支持主从分离,也就是查询可以使用Slave的Mongodb: 其中的同步延迟配置,用于配置在查询的时候缓存多久之前的数据,因为同步的延迟问题,缓存太新的数据很可能导致数据不完整。
Adhesive框架中的WCF分布式服务模块基于原来写的WCF扩展修改而来,主要的修改如下: 1)原先使用数据库的元数据配置,现在统一改为配置服务,主要是为了统一,不用再去开发一个WCF的配置后台 2)原先直接存储到Mongodb中的各种日志,现在统一使用Monodb数据服务,也是进行了一个统一 3)和信息中心模块中的网站请求状态(统计每一个请求的情况)一样,这里也提供了WCF客户端和服务端的执行状态 这个模块主要实现如下功能: 1)集中化的配置:地址、绑定、契约、端点等等信息都无需在配置文件中配置,直接在统一的配置服务中进行配置。
Adhesive框架中是分布式组件客户端首先实现的是基于Json序列化+二进制协议的Memcached客户端。在本文中会介绍其中的实现细节。 我们先来看一下项目结构: 从这个结构大致可以看出: 1)Memcached只是其中的一个具体实现,这个组件期望提供一个ClientSocket-Cl...
如果我们新建了一个Adhesive.Test.WebApp的网站应用程序,希望对其中的异常进行监控报警,那么我们可以直接通过配置服务后台配置报警模块实现。 很明显,这是一个对数据量的监控,在异常记录达到一定数据量之后进行报警: 点击增加按钮,取名为“测试应用程序的异常监控”,这里看到的是...
在此文中,我们会实践一下,如何使用Mongodb数据服务存储新的自定义数据。之前我们说过了,使用Mongodb数据服务只有4步这么简单: 1)定义实体 2)定义元数据 3)配置Mongodb数据服务 4)调用API插入数据 在这里,我们希望使用Mongodb存放书籍借阅的信息: p...
Adhesive框架的Mongodb数据服务模块提供了大量数据的存储功能。在有的时候,我们希望对数据量或是数据的某个值进行一个监控,并且在达到某个阀值之后进行报警。此时,可以使用报警服务模块进行邮件报警和短信报警。
Memcached是一个很常见的分布式组件,现在有很多.NET下开源的Memcached组件的客户端实现,比如EnyimMemcachedClient。在Adhesive框架中实现了一个分布式组件客户端,同时也实现了第一个具体的客户端,也就是Memcached。
Mongodb数据服务可以直接接受任何类型数据,并且它设计为可以承受大量数据的写入。为了能保存任何类型的数据,并且在后台可以查看任何类型的数据,因此我们必须在收到数据的时候对数据的元数据进行提取,随同主体数据一并保存在数据库中。
在前一篇中,我们介绍的主要是站在开发人员的角度如何使用Mongodb数据服务来保存数据,这一篇会介绍在保存数据之后,如何去查看数据,也就是怎么样去使用Mongodb数据服务的通用后台。 Mongodb数据服务的后台是采用Silverlight4制作的。
之前介绍的应用程序信息中心模块中所有日志、异常、性能和状态数据都依赖Mongodb数据服务,Mongodb数据服务的接口也简单的可以: public interface IMongodbInsertService : IDisposable { void Insert(object item); } 总之一点,不管什么数据,提交进来即可!在提交之前所要做的只是设计数据实体 ,并且为实体标注一些元数据Attribute,来告诉Mongodb数据服务,希望怎么样保存数据,又希望怎么样呈现数据。
应用程序信息中心模块项目的源代码结构如下: 在这里可以看到: 1、接口项目主要都是服务的接口定义、基于接口的扩展方法以及接口中需要用到的一些实体的定义。 2、实现项目主要由几部分构成: 1)模块的配置 2)异常服务 3)自动附加信息的各种提供程序 4)日志服务 5)性能服务 6...
应用程序信息中心 Application Infomcation Center 简称AIC其实是一套已经实现的程序,集应用程序数据收集、数据存储以及后台查询、报警为一体。主要的作用是实现网站特殊信息(比如未处理异常)的监控和报警。
公共模块是所有框架内部组件依赖的项目,其中包括一些基础实现和小工具。 首先是一个Bootstrapper的理念: 1、在需要的时候,我们可以把实现和接口进行分离,实现使用依赖注入(不一定要项目引用,只需要文件夹下有实现的DLL)。
Adhesive框架是为了满足公司内部项目需要开发的一套基础框架。Adhesive这个单词是胶水的意思,这个名字有几层含义: 1、框架其本身的组件像胶水一样相互配合,旨在为一个中型的互联网网站提供一套基于.NET 4.0的开发基础平台,实现灵活性、性能、伸缩性等。
(一)总体介绍 (二)公共模块实现 (三)配置服务模块简介 (四)配置服务模块使用 (五)应用程序信息中心模块使用 (六)应用程序信息中心模块实现 (七)Mongodb数据服务模块使用(上) (八)Mongodb数据服务模块使用(下) ...
在公司内部有很多基础框架或者基础组件,甚至对于使用SOA架构的公司来说,会有大量的业务组件的契约程序集,对于这些框架或组件的引用管理有的人使用源代码管理工具,但是NuGet相比源代码管理工具更方便: 1) 安装和卸载:不需要手动添加和移除引用,不需要手动改写配置文件甚至是一些初始化服务的代码。