首页 文章 精选 留言 我的

精选列表

搜索[MSA技术],共10000篇文章
优秀的个人博客,低调大师

【技术分享】《深入理解Elasticsearch》读书笔记

题记 由于之前已经梳理过Elasticsearch基础概念且在项目中实战过Elasticsearch的增删改查、聚类、排序等相关操作,对Elasticsearch算是有了一定的认知。但是,仍然对于一些底层的原理认知模糊,特买来《深入理解Elasticsearch》过了一遍,第一章到第四章偏应用,跟着敲一遍代码基本就能理解原理,第五章到第九章偏理论。现将书中一些细节知识点结合官网文档梳理如下。 第五章 分布式索引架构 如何选择合适的分片和副本数? 目的:规划索引及配置,适应应用的变化。 正确认知:分片数索引创建后不可以修改,副本数索引创建后可以通过API随时修改。 多副本的缺点:额外副本占据了额外的存储空间,构建索引副本的开销也随之增大。 同时要注意:如果不创建副本,当主分片发生问题时,可能会造成数据的丢失。 配置参考:最理想的分片数量应该依赖于节

优秀的个人博客,低调大师

【技术实验】mysql准实时同步数据到Elasticsearch

实验背景 Elasticsearch在阿里云商业化已经有一段时间,它作为大数据场景下搜索和分析的引擎,可以用于很多场景。前两天有同学提到需要将MySQL中的数据准实时的同步到ElasticSearch中的需求,由于自己对ES也很感兴趣但一直没有机会实操,恰好趁这个机会学习验证了一下,并把过程记录下来,方便新人尽快上手少走弯路。 本次实操采用Logstash实现将MySQL数据实时同步到ElasticSearch,过程中主要以实操步骤为主,并没有详细介绍这两个产品本身,所以文档适合对Logstash和Elasticsearch有一些基础的人阅读。使用Logstash过程中会用到一些参数,每个参数的详细解释请参考官方文档。 实验步骤 1. 开通阿里云Elasticsearch 开通阿里云Elasticsearch。产品链接 ES控制台中修改配置,

优秀的个人博客,低调大师

Microsoft .NET Pet Shop 4 架构与技术分析

1.项目概述与架构分析 微软刚推出了基于ASP.NET 2.0下的Pet Shop 4,该版本有了一个全新的用户界面。是研究ASP.NET 2.0的好范例啊,大家都知道,一直以来,在.NET和Java之间争论不休,到底使用哪个平台开发的企业级应用性能最好、结构最优、生产力最高。为了用事实说话,通过对项目各方面的性能评估进而在比较.NET和Java的高下。用户做比较的这个项目就是Petshop。正因为Petshop肩负着上面所说的重任,各方面必须是最优的,架构设计应该是经过慎重考虑的。所以其一经推出,便成为了开发者、架构师等人学习、研究的典范。 日前微软推出了基于.NET Framework 2.0开发的Petshop 4。新的Petshop4实现了与Petshop 3相同甚至更多的特性,由于采用了Master Pages,Membership,以及Profile,SqlCacheDependency,但是代码量却减少了四分之一。同时,在事务、数据缓存、安全方面使用了.NET 2.0附带的特性,构建了一个灵活的最佳实践的应用程序。 他们利用了Project Conversion Wizard把项目从ASP.NET 1.1移植到了ASP.NET 2.0,然后做了以下改动: 1 .用System.Transactions代替了原来的Serviced Components提供的事务功能 代码实现:PetShop.BLL.OrderSynchronous的 public voidInsert(PetShop.Model.OrderInfoorder) 。 2 .用强类型的范型集合代替了原来的弱类型集合 publicIList<ProductInfo> GetProductsByCategory(stringcategory) { // Return new if the string is empty if(string.IsNullOrEmpty(category)) returnnewList<ProductInfo>(); // Run a search against the data store returndal.GetProductsByCategory(category); } 3 .采用ASP.NET 2.0 Membership来做认证和授权 4 .创建了针对Oracle10g的CustomASP.NET 2.0 Membership Provider 5 .利用ASP.NET 2.0的Custom Oracle和SQL Server Profile Providers做用户状态管理,包括购物车等 6 .采用了Master Pages,取代了原来的用户控件,来实现统一的界面效果 7 .使用了ASP.NET 2.0 Wizard控件实现check-out 8 .使用了SqlCacheDependency来实现数据库层次的缓存更新(cache invalidation)功能 9 .使用了消息队列来实现异时订单处理。 2. 整体架构: 数据库:(暂略) 项目列表:从整体可以看出,Pet Shop 4的项目体系已经很庞大,考虑的方面也较3.0更全面复杂。 序号 项目名称 描述 1 BLL 业务逻辑层 2 CacheDependencyFactory 缓存依赖类的 工厂类 3 WEB 表示层 4 DALFactory 数据层的抽象工厂 5 DBUtility 数据访问类组件 6 IBLLStrategy 同步/异步策略接口 7 ICacheDependency 缓存依赖类 接口 8 IDAL 数据访问层接口定义 9 IMessaging 异时处理消息队列接口定义 10 IProfileDAL Profile 的数据访问层接口定义 11 Membership Membership 认证和授权管理 12 MessagingFactory 异时处理消息队列的 抽象工厂 13 Model 业务实体 14 MSMQMessaging 异时处理消息队列的实现 15 OracleDAL Oracle 数据访问层 16 OracleProfileDAL Oracle 的Profile Providers 做用户状态管理,包括购物车等 17 OrderProcessor 后台处理进程,处理订单队列 18 Profile Profile 的数据访问层 19 ProfileDALFactory ProfileDAL 的工厂类(反射创建ProfileDAL) 20 SQLProfileDAL SQL Server 的Profile Providers 做用户状态管理,包括购物车等 21 SQLServerDAL SQLServer 数据访问层 22 TableCacheDependency 缓存依赖实现类 项目分解 : 由于整体已经有22个项目,所以,对于初学者一看就晕了,所以,我做了分解,可以大体上分几块去理解。 序号 项目名称 描述 1 WEB 表示层 2 Model 业务实体 3 BLL 业务逻辑层 4 DALFactory 数据层的抽象工厂 5 IDAL 数据访问层接口定义 6 SQLServerDAL SQLServer 数据访问层 7 OracleDAL Oracle 数据访问层 8 DBUtility 数据库访问组件基础类 9 CacheDependencyFactory 缓存依赖类的 工厂类 10 ICacheDependency 缓存依赖类 接口 11 TableCacheDependency 缓存依赖实现类 12 IBLLStrategy 同步/异步处理策略接口(实现在bll根据配置反射选择) 13 MessagingFactory 异时处理消息队列的 抽象工厂 14 IMessaging 异时处理消息队列接口定义 15 MSMQMessaging 异时处理消息队列的实现 16 Profile Profile 的数据访问层 17 ProfileDALFactory ProfileDAL 的工厂类(反射创建ProfileDAL) 18 IProfileDAL Profile 的数据访问层接口定义 19 OracleProfileDAL Oracle 的Profile Providers 做用户状态管理 20 SQLProfileDAL SQL Server 的Profile Providers 做用户状态管理 21 Membership Membership 认证和授权管理 22 OrderProcessor 后台处理进程,处理订单队列 3 .Petshop 4中的设计模式 : 工厂模式 : 首当其冲的就是工厂模式,很容易就可以看出来,也是应用最多的。 DALFactory :数据访问层的抽象工厂(决定创建哪种数据库类型的数据访问层。可以选择:SQLServer,Oracle) CacheDependencyFactory : 缓存依赖类的 工厂类。(创建具体表的缓存依赖) MessagingFactory : 异时处理消息队列的 抽象工厂(反射创建具体的 异时处理类 ) ProfileDALFactory : ProfileDAL 的工厂类(反射 选择 创建Oracle和SQL Server的ProfileDAL) 策略模式: IorderStrategy 中介模式 CategoryDataProxy ItemDataProxyProductDataProxy 暂时只看了这么多,以后有时间继续分解,如果你有不同的见解或经验,也请写下来,好让大家来共同学习,共同探讨,共同进步。 (作者:李天平 转载请注明) 具体介绍可以参看MSDN: .NET Pet Shop 4: Migrating an ASP.NET 1.1 Application to 2.0 [url]http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/bdasamppet4.asp[/url] 本文转自 litp 51CTO博客,原文链接:http://blog.51cto.com/litianping/123836,如需转载请自行联系原作者

优秀的个人博客,低调大师

虚拟化技术—docker容器—PIPEWORK解读与实践

本文通过3个样例——将Docker容器配置到本地网络环境中、单主机Docker容器的VLAN划分、多主机Docker容器的VLAN划分,演示了如何使用pipework帮助我们进行复杂的网络设置,以及pipework是如何工作的。 1、pipework的使用以及源码分析 Docker自身的网络功能比较简单,不能满足很多复杂的应用场景。因此,有很多开源项目用来改善Docker的网络功能,如pipework、weave、flannel等。这里,就先介绍一下pipework的使用和工作原理。 pipework是由Docker的工程师Jérme Petazzoni开发的一个Docker网络配置工具,由200多行shell实现,方便易用。下面用三个场景来演示pipework的使用和工作原理。 1.1、将Docker容器配置到本地网络环境中 为了使本地网络中的机器和Docker容器更方便的通信,我们经常会有将Docker容器配置到和主机同一网段的需求。这个需求其实很容易实现,我们只要将Docker容器和主机的网卡桥接起来,再给Docker容器配上IP就可以了。 下面我们来操作一下,我主机A地址为192.168.137.100/24,网关为192.168.137.1,需要给Docker容器的地址配置为192.168.137.150/24。在主机A上做如下操作: #安装pipework git clone https://github.com/jpetazzo/pipework cp ~/pipework/pipework /usr/local/bin/ #启动Docker容器。 docker run -itd --name test1 centos /bin/bash #配置容器网络,并连到网桥br0上。网关在IP地址后面加@指定。若主机环境中存在dhcp服务器,也可以通过dhcp的方式获取IP #pipework br0 test1 dhcp pipework br0 test1 192.168.137.150/24@192.168.137.1 #将主机eth0桥接到br0上,并把eth0的IP配置在br0上。这里由于是远程操作,中间网络会断掉,所以放在一条命令中执行。 ip addr add 192.168.137.100/24 dev br0; \ ip addr del 192.168.137.100/24 dev eth0; \ brctl addif br0 eth0; \ ip route del default; \ ip route add default gw 192.168.137.1 dev br0 这时可以ifconfig看一下:(截取不完,只截取需要的) 2.2、单主机Docker容器VLAN划分 pipework不仅可以使用Linux bridge连接Docker容器,还可以与OpenVswitch结合,实现Docker容器的VLAN划分。为了演示隔离效果,我们将4个容器放在了同一个IP网段中。但实际他们是二层隔离的两个网络,有不同的广播域。 #在主机A上创建4个Docker容器,test1、test2、test3、test4 docker run -itd --name test1 centos /bin/bash docker run -itd --name test2 centos /bin/bash docker run -itd --name test3 centos /bin/bash docker run -itd --name test4 centos /bin/bash #将test1,test2划分到一个vlan中,vlan在mac地址后加@指定,此处mac地址省略。 pipework ovs0 test1 192.168.137.150/24 @100 pipework ovs0 test2 192.168.137.151/24 @100 #将test3,test4划分到另一个vlan中 pipework ovs0 test3 192.168.137.152/24 @200 pipework ovs0 test4 192.168.137.153/24 @200 完成上述操作后,使用docker attach连到容器中,然后用ping命令测试连通性,发现test1和test2可以相互通信,但与test3和test4隔离。这样,一个简单的VLAN隔离容器网络就已经完成。 2.3、多主机Docker容器的VLAN划分 为了实现这个目的,我们把宿主机上的网卡桥接到各自的OVS网桥上,然后再为容器配置IP和VLAN就可以了。我们实验环境如下,主机A和B各有一块网卡eth0,IP地址分别为192.168.137.100/24,192.168.137.101/24。在主机A上创建两个容器test1、test2,分别在VLAN 100和VLAN 200上。在主机B上创建test3、test4,分别在VLAN 100和VLAN 200 上。最终,test1可以和test3通信,test2可以和test4通信。 #在主机A上 #创建Docker容器 docker run -itd --name test1 centos /bin/bash docker run -itd --name test2 centos /bin/bash #划分VLAN pipework ovs0 test1 192.168.137.150/24 @100 pipework ovs0 test2 192.168.137.151/24 @200 #将eth0桥接到ovs0上 ip addr add 192.168.137.100/24 dev ovs0; \ ip addr del 192.168.137.100/24 dev eth0; \ ovs-vsctl add-port ovs0 eth0;\ ip route del default; \ ip route add default gw 192.168.137.1dev ovs0 #在主机B上 #创建Docker容器 docker run -itd --name test3 centos /bin/bash docker run -itd --name test4 centos /bin/bash #划分VLAN pipework ovs0 test3 192.168.137.152/24 @100 pipework ovs0 test4 192.168.137.153/24 @200 #将eth0桥接到ovs0上 ip addr add 192.168.137.101/24 dev ovs0; \ ip addr del 192.168.137.101/24 dev eth0; \ ovs-vsctl add-port ovs0 eth0;\ ip route del default; \ ip route add default gw 192.168.137.1 dev ovs0 完成上面的步骤后,主机A上的test1和主机B上的test3容器就划分到了一个VLAN中,并且与主机A上的test2和主机B上的test4隔离(主机eth0网卡需要设置为混杂模式,连接主机的交换机端口应设置为trunk模式,即允许VLAN 100和VLAN 200的包通过)。 除此之外,pipework还支持使用macvlan设备、设置网卡MAC地址等功能。不过,pipework有一个缺陷,就是配置的容器在关掉重启后,之前的设置会丢失。 本文转自 sykmiao 51CTO博客,原文链接:http://blog.51cto.com/syklinux/1875661,如需转载请自行联系原作者

优秀的个人博客,低调大师

无敌大奉献:iOS技术开发知识整理

今天为iOS开发者奉献一份大餐,整理了iOS开发过程中的一些基础知识。首先,根据是Debug和Release显示不同的调试信息在Ios开发中是常见的,我以前是这么做的: #ifdef DEBUG #define Dlog NSLog #else #define Dlog //NSLog #endif 但是在Xcode4.2 里当设置为release版本的时候,会给警告。 收集了下显示debug信息的方法 方法一 在prefix header pch文件中添加如下代码 #ifndef __OPTIMIZE__ # define NSLog(...) NSLog(__VA_ARGS__) #else # define NSLog(...) {} #endif 方法二 // DLog is almost a drop-in replacement for NSLog // DLog(); // DLog(@"here"); // DLog(@"value: %d", x); // Unfortunately this doesn't work DLog(aStringVariable); you have to do this instead DLog(@"%@", aStringVariable); #ifdef DEBUG # define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__); #else # define DLog(...) #endif // ALog always displays output regardless of the DEBUG setting #define ALog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__); 当然,你还想需要更强大的调试能力,那么这个开源的NSLogger可能会比较对你的口味。https://github.com/fpillet/NSLogger 2.简要介绍下内存管理机制? Cocoa中提供了一个机制来实现上面提到的这个逻辑模型,它被称为“引用计数”(referring counting)或“保留计数”(retain counting): 3.objc中的减号和加号的意思以及用法? ①减号表示一个函数、或者方法或者消息的开始(在一个类的实例上被调用和实施)(可以认为是私有方法) ②加号表示其他的函数可以直接调用这个类中的方法,而不用创建这个类的实例(俗称静态方法) 4、项目整理 按钮: BtnWinWin = [UIButton buttonWithType: UIControlStateNormal]; BtnWinWin.frame = CGRectMake(768, 679, 256, 42); [BtnWinWin setBackgroundImage:[UIImage imageNamed:@"btnwinwin.jpg"] forState:UIControlStateNormal]; [BtnWinWin addTarget:self action:@selector(WinWin) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:BtnWinWin]; 播放器: NSString *soundPath = [[NSBundle mainBundle]pathForResource:musicTop ofType:@"mp3"]; NSURL *soundURL = [[NSURL alloc]initFileURLWithPath:soundPath]; player = [[AVAudioPlayer alloc]initWithContentsOfURL:soundURL error:nil]; [player setDelegate:self]; [player play]; 两个控制器之间的动画转换: mainFrame = [[Test_Book1_2_Classes_ViewControlleralloc] init]; haveMainFram =TRUE; CATransition *transition = [CATransitionanimation]; transition.duration = 1.0f; /* 间隔时间*/ transition.timingFunction = [CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseInEaseOut]; /* 动画的开始与结束的快慢*/ transition.type = @"pageCurl"; transition.subtype = kCATransitionFromTop; /* 动画方向*/ transition.delegate = self; [self.navigationController.view.layeraddAnimation:transition forKey:nil]; [self.navigationControllerpushViewController:mainFrameanimated:YES]; sdk相关: 1、两个.a静态库的合并,静态库有分适合模拟器的和真机的,如何合并请看:我的另一篇文章http://www.cnblogs.com/visen-0/archive/2011/08/02/2125067.html 2、创建root权限应用:http://www.cnblogs.com/visen-0/archive/2011/08/22/2149014.html 3、获取已经安装的列表:http://www.cnblogs.com/visen-0/archive/2011/08/22/2148847.html 4、自制.ipa文件下载安装。 5、判断是否越狱,去[NSFileManager defaultManager]找是否有对应的比如Cydia.app程序。 给服务器提交信息: // 设备信息 UIDevice *device = [UIDevice currentDevice]; NSString *identifier = [[NSStringstringWithString:[device uniqueIdentifier]] lowercaseString]; NSLog(@"%@",identifier); NSString *requestString = [NSStringstringWithFormat:@"http://www.yrwang.net/post.aspx?client=ios&deviceId=%@&reportMessage=%@",identifier,opinion.text]; NSString *requestStringUTF8 = [requestString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSURL * myURL = [[NSURL alloc] initWithString:requestStringUTF8]; NSMutableURLRequest *myRequest = [NSMutableURLRequestrequestWithURL: myURL cachePolicy: NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval: 30]; [myURL release]; connection_ = [[NSURLConnectionalloc] initWithRequest: myRequest delegate: self]; 解析xml: NSXMLParser* xmlRead = [[NSXMLParser alloc] initWithData:data];//初始化NSXMLParser对象 [data release]; [xmlRead setDelegate:self]; [xmlRead parse]; 监听者模式: [[NSNotificationCenterdefaultCenter] addObserver:self selector:@selector(getUpdatedPoints:) name:111 object:nil]; [[NSNotificationCenterdefaultCenter] postNotificationName:111 object:nil]; 单例模式: static AdPublisherConnect *sharedInstance_ = nil; + (AdPublisherConnect*)sharedAdPublisherConnect { if(!sharedInstance_) { sharedInstance_ = [[superalloc] init]; } returnsharedInstance_; } 文件的读取写,创建: 这个是创建的例子: //创建文件管理器 NSFileManager *fileManager = [NSFileManagerdefaultManager]; //获取路径 //参数NSDocumentDirectory要获取那种路径 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0];//去处需要的路径 //更改到待操作的目录下 [fileManager changeCurrentDirectoryPath:[documentsDirectory stringByExpandingTildeInPath]]; //创建文件fileName文件名称,contents文件的内容,如果开始没有内容可以设置为nil,attributes文件的属性,初始为nil //获取文件路径 NSString *path = [documentsDirectory stringByAppendingPathComponent:fileName]; //创建数据缓冲 NSMutableData *writer = [[NSMutableDataalloc] init]; //将字符串添加到缓冲中 [writer appendData:[contents dataUsingEncoding:NSUTF8StringEncoding]]; //将其他数据添加到缓冲中 //将缓冲的数据写入到文件中 [writer writeToFile:path atomically:YES]; [writer release]; 字符串的获取某个操作:NSRange e = [tempString rangeOfString:@","]; key = [tempString substringToIndex:e.location]; e = [tempString rangeOfString:@"\r\n"]; tempString = [tempString substringFromIndex:e.location+1]; 录音: AVAudioSession 分页: uitable分页 查找文件目录; + (NSMutableArray *)findFile{ NSFileManager *fileManager = [[NSFileManager defaultManager] init]; NSMutableArray *everyTitle = [[NSMutableArray alloc] init]; NSArray *filePaths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES); NSString *filePath = [filePaths objectAtIndex:0]; NSLog(@"%@",filePath); NSDirectoryEnumerator *direnum = [fileManager enumeratorAtPath:filePath]; NSString *fileName; while ((fileName = [direnum nextObject])) { [everyTitle addObject:fileName]; } return everyTitle; } 表单: UIActionSheet 长按按钮: UILongPressGestureRecognizer 滚动视图: UIScrollView web网页: UIWebView 隐藏导航栏,应用全屏。 本文转自 wws5201985 51CTO博客,原文链接:http://blog.51cto.com/wws5201985/736034,如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册