After 7 years of development, the longer the time, the more you find that you need an architecture like the title to support the entire platform.
My type of technology is. NET development, I always feel that. NET technology talent is prone to bottlenecks, in fact, this bottleneck is more like this environment caused. The simple and fast development is what the. NET pursues, and this kind of pursuit leads to the whole language platform in the technology like the most direct and simple way to solve the problem, as to the structure, maintenance, continuous upgrade, or other projects on-line or after the problem. Mature, robust and well-known technology architecture seems to be every technology is a matter of opinion, have their own independent understanding, and like Java, such as SSH and other mature recognized architecture is very few in the industry, perhaps you will take three layers of architecture to say things, but I personally think, three layer is only suitable for small and medium-sized projects.
Nonsense less, directly into the topic, distributed, in my understanding, to solve a few problems (note: Many of the core primary key I will be unlimited) database, session, cache, communication between projects, cross-language, synchronization and so on. These problems can be solved in a variety of core components in the Java environment. And the components seem to unify with spring as the middle of the harmonic agent. While. NET is relatively scarce, the data access layer needs to implement its own support for accessing different databases, supporting sub-tables, supporting virtual table access, and, with Taobao's TDDL, preparing to develop a ddl.net,.net version of the Distributed data Access layer, with. NET asynchronous access, Implements multi-line access to the Library sub-table and merges datasets. Communication between projects I chose Thrift, which solves the cross-language and project goals. While the cache chooses memcached, it is also the core of my distributed session only the content of the session store is the JSON data format, which also solves the unified format of session data in different language development time. Message Queuing MessageQueue, the choice of MSMQ. NET Intermediate harmonic agent is rich, and features each. In the end, I chose Spring.net, after all, is a relatively mature Java product, under the. NET platform will not be bad. And Spring.net also comes with MVC, WCF, windowservices and other seamless integration of case code, can be said to be perfect, the only certainty is a bit more configuration, this time must choose a better code generator, In the existing code generator I did not find the good so I have changed one in the large code, code generation based on the project configuration, the base data generated by the database, support SQL Server, MySQL, Oracle single code generation and database-independent only configuration-related, So the code generator can work offline. Module files are also project-independent units, so a code generator can configure various project types, and the templates are independent of each other. This is also more appropriate for team development and Code specification. This can be solved by a large number of code problems caused by the flexibility of the architecture. Then there is the file server, which I now consider to be stored directly in the corresponding server by thrift, and then synced to different servers by the automatic synchronization code in the file server. Search is also a standalone module, Lucene.Net is the base library, Zoienet (modified by the Java project, not yet published) to do real time index. Of course, as an industry vertical search engine, the data structure of the search according to different needs to make corresponding adjustments. The current workload of the front-end is also exploding. So I chose combo.net (my own middleware), which makes it possible to encapsulate the packaging front-end of the component approach.
This is a project built according to this structure.
Harness the Metronic front end for a touch of relaxation
Http://www.hxteservices.com
Some of the code is attached below:
Ddl.net--Configuring a different data source
<Atom-datasourcename= "group_test_3_001"provider= "sqlServer4.0" Property= "SQL Server"connectionString= "Data Source=${datasource};d atabase=${database};user Id=${userid};p assword=${password};connection reset= False;connection lifetime=5; Min Pool size=1; Max Pool size=50 " /> <Atom-datasourcename= "Group_test_4"provider= "MYSQL" Property= "MYSQL"connectionString= "Data Source=${datasource};d atabase=${database};user Id=${userid};p assword=${password};connection reset= False;connection lifetime=5; Min Pool size=1; Max Pool size=50 " />
--database grouping, reading and writing separation configuration and related weights configuration
<Group-datasourcename= "ds_1_001"type= "SQL Server"> <Settings> <Atomname= "group_test_1_001"Weight= "R10w10p0q0"/> <Atomname= "group_test_2_001"Weight= "R10w10p0q0"/> <Atomname= "group_test_3_001"Weight= "R10w10p0q0"/> </Settings> </Group-datasource>
Combo.net
@using Combo; @using Combo.mvc;--apply the appropriate js@{html within the plug-in//<!--BEGIN CORE PLUGINS --. Requiresjs ("Jquery.min.js", Homeglobal.scriptcoreplugin,101)//<!--END CORE PLUGINS ---//<!--BEGIN PAGE level SCRIPTS --. Requiresjs ("Frontend/layout/scripts/layout.js", Homeglobal.scriptpagelevel,10006)//<!--END PAGE level SCRIPTS --;}<!--HTML plugin to use html-->--the plugin needs to write the Html segment @{html.requiresscript (@"jQuery (document). Ready (function () {layout.initfixheaderwithpreheader ();/* Switch on Header fixing Pre-header) */layout.initnavscrolling ();});", -);}
Generate Good Code
<Scriptsrc= "http://jac.hxteservices.com/combo.axd/assets/global/plugins/??" Jquery.min.js,jquery-migrate.min.js,bootstrap/js/bootstrap.min.js?v=1004.js "type= "Text/javascript"></Script>
<Scriptsrc= "http://jac.hxteservices.com/combo.axd/assets/global/plugins/??" Fancybox/source/jquery.fancybox.pack.js,carousel-owl-carousel/owl-carousel/owl.carousel.min.js, slider-revolution-slider/rs-plugin/js/jquery.themepunch.revolution.js,slider-revolution-slider/rs-plugin/js/ Jquery.themepunch.tools.min.js?v=1004.js "type= "Text/javascript"></Script>
<Scriptsrc= "http://jac.hxteservices.com/combo.axd/assets/??" Frontend/layout/scripts/back-to-top.js,global/scripts/fromserialize.js,global/scripts/mvcparammatch.js, Frontend/pages/scripts/revo-slider-init.js,frontend/layout/scripts/layout.js?v=1004.js "type= "Text/javascript"></Script> <Scripttype= "Text/javascript">jQuery (document). Ready (function() {layout.init (); }); </Script>
Http://www.hxteservices.com
This site is made by it. Generating good front-end code is absolutely beautiful. And it's far more than that.
--spring.net configuration file
<Context> <ResourceURI= "File://~/App_Data/Config/Spring/thrift.config"/> <!--thrift Integrated <ResourceURI= "File://~/App_Data/Config/Spring/controller.config"/><!--MVC -- <ResourceURI= "File://~/App_Data/Config/Spring/persistence.campus.config"/> <!--database -- <ResourceURI= "File://~/App_Data/Config/Spring/controller.campus.config"/> <ResourceURI= "File://~/App_Data/Config/Spring/persistence.classify.config"/> <ResourceURI= "File://~/App_Data/Config/Spring/controller.classify.config"/> <ResourceURI= "File://~/App_Data/Config/Spring/persistence.ccenter.config"/> <ResourceURI= "File://~/App_Data/Config/Spring/controller.ccenter.config"/> <ResourceURI= "File://~/App_Data/Config/Spring/persistence.ucenter.config"/> <ResourceURI= "File://~/App_Data/Config/Spring/controller.ucenter.config"/></Context>
Separate projects by module, one by one, and integrate different technologies more flexibly
Code generators--including configuration file generation, and Module project generation.
Only need to configure once, allow to run offline, support a variety of databases and project-based, and with the development of the project, the template, comments will follow up, more suitable for team development
What technologies are needed to support a distributed, cross-language, cross-platform, agile process?