Who is using Fuel?

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
20 messages Options
Reply | Threaded
Open this post in threaded view
|

Who is using Fuel?

Mariano Martinez Peck
Of course, not the fuel you use to go to work every day ;)  I am talking about Fuel serializer.
In particular, I wonder if our page deserves an update: rmod.lille.inria.fr/web/pier/software/Fuel/Software-using-Fuel

Let me know if there is something I should add.

Thanks,

--
Mariano
http://marianopeck.wordpress.com

Reply | Threaded
Open this post in threaded view
|

Re: [Pharo-users] Who is using Fuel?

NorbertHartl

Am 28.02.2012 um 16:41 schrieb Mariano Martinez Peck:

Of course, not the fuel you use to go to work every day ;)  I am talking about Fuel serializer.
In particular, I wonder if our page deserves an update: rmod.lille.inria.fr/web/pier/software/Fuel/Software-using-Fuel

Let me know if there is something I should add.

We are using it in 


I first used image persistence but the image grow to large. Then I added fuel as journal to be written before image save in order to be able to recover from an emergency. 
Now we redo the persistence part. An account object graph is dissected into configuration part and payload part. The payload is written directly to mongo db in a Json format. The configuration part will be written as fuel blob to mongo. Planned is that at startup a configured amount of account fuel blobs are loaded and started. Those configurations have their own processes that write back payload to mongo. Etc.

Just in case you want to know :)

Norbert

Reply | Threaded
Open this post in threaded view
|

Re: [Pharo-users] Who is using Fuel?

Mariano Martinez Peck


On Tue, Feb 28, 2012 at 5:03 PM, Norbert Hartl <[hidden email]> wrote:

Am 28.02.2012 um 16:41 schrieb Mariano Martinez Peck:

Of course, not the fuel you use to go to work every day ;)  I am talking about Fuel serializer.
In particular, I wonder if our page deserves an update: rmod.lille.inria.fr/web/pier/software/Fuel/Software-using-Fuel

Let me know if there is something I should add.

We are using it in 


I first used image persistence but the image grow to large. Then I added fuel as journal to be written before image save in order to be able to recover from an emergency. 

I didn't undersantd this one. What is what you are serializing that you want to be able to recover in case of an emergency?
 
Now we redo the persistence part. An account object graph is dissected into configuration part and payload part. The payload is written directly to mongo db in a Json format. The configuration part will be written as fuel blob to mongo. Planned is that at startup a configured amount of account fuel blobs are loaded and started. Those configurations have their own processes that write back payload to mongo. Etc.

 
Just in case you want to know :)


Interested indeed :)   I added it under "Custom applications"

Thanks!


--
Mariano
http://marianopeck.wordpress.com

Reply | Threaded
Open this post in threaded view
|

Re: [Pharo-users] Who is using Fuel?

Sven Van Caekenberghe
In reply to this post by NorbertHartl

On 28 Feb 2012, at 17:03, Norbert Hartl wrote:

> Am 28.02.2012 um 16:41 schrieb Mariano Martinez Peck:
>
>> Of course, not the fuel you use to go to work every day ;)  I am talking about Fuel serializer.
>> In particular, I wonder if our page deserves an update: rmod.lille.inria.fr/web/pier/software/Fuel/Software-using-Fuel
>>
>> Let me know if there is something I should add.
>>
> We are using it in
>
> http://www.2denker.de/product/apitester
>
> I first used image persistence but the image grow to large. Then I added fuel as journal to be written before image save in order to be able to recover from an emergency.
> Now we redo the persistence part. An account object graph is dissected into configuration part and payload part. The payload is written directly to mongo db in a Json format. The configuration part will be written as fuel blob to mongo. Planned is that at startup a configured amount of account fuel blobs are loaded and started. Those configurations have their own processes that write back payload to mongo. Etc.
>
> Just in case you want to know :)
>
> Norbert

Cool and interesting.

Yes, we want to know about stuff like that !

Sven


Reply | Threaded
Open this post in threaded view
|

Re: [Pharo-users] Who is using Fuel?

NorbertHartl
In reply to this post by Mariano Martinez Peck

Am 28.02.2012 um 17:23 schrieb Mariano Martinez Peck:



On Tue, Feb 28, 2012 at 5:03 PM, Norbert Hartl <[hidden email]> wrote:

Am 28.02.2012 um 16:41 schrieb Mariano Martinez Peck:

Of course, not the fuel you use to go to work every day ;)  I am talking about Fuel serializer.
In particular, I wonder if our page deserves an update: rmod.lille.inria.fr/web/pier/software/Fuel/Software-using-Fuel

Let me know if there is something I should add.

We are using it in 


I first used image persistence but the image grow to large. Then I added fuel as journal to be written before image save in order to be able to recover from an emergency. 

I didn't undersantd this one. What is what you are serializing that you want to be able to recover in case of an emergency?

All of my data.  An account can log in and configure the service. The service collects data. All of these modifications should be persisted. I experience image corruption with big images. Every week or so the vm just didn't start the images anymore because it stated "premature end of image file". So I write down all my objects via fuel to disk before I save the image. In case of an emergency (image corruption) I take a fresh image and load back the saved fuel graph. And within 2 minutes I'm once read to go. 
Now the big parts of the data are in mongo so I don't expect it to happen real soon again. 
 
Now we redo the persistence part. An account object graph is dissected into configuration part and payload part. The payload is written directly to mongo db in a Json format. The configuration part will be written as fuel blob to mongo. Planned is that at startup a configured amount of account fuel blobs are loaded and started. Those configurations have their own processes that write back payload to mongo. Etc.

 
Just in case you want to know :)


Interested indeed :)   I added it under "Custom applications"

thanks,

Norbert

Reply | Threaded
Open this post in threaded view
|

Re: [Pharo-users] Who is using Fuel?

Yanni Chiu
In reply to this post by NorbertHartl
On 28/02/12 11:03 AM, Norbert Hartl wrote:

>
> I first used image persistence but the image grow to large. Then I added
> fuel as journal to be written before image save in order to be able to
> recover from an emergency.
> Now we redo the persistence part. An account object graph is dissected
> into configuration part and payload part. The payload is written
> directly to mongo db in a Json format. The configuration part will be
> written as fuel blob to mongo. Planned is that at startup a configured
> amount of account fuel blobs are loaded and started. Those
> configurations have their own proces ses that write back payload to
> mongo. Etc.

That's similar to what I do, except no image save and no mongo db.

Here's how it goes:
- on restart the image reconstructs a Pier kernel saved via Fuel to a file
- included in the Pier kernel is what you're calling the "configuration
part" - there are custom (non-std Pier) components here.
- the components in the reconstructed image can read/write a "payload"
part, which is serialized to files using Fuel and SandstoneDb.
- additionally, a "sub-tree" of the Pier kernel can be exported to a
file using Fuel serialization, and later imported using Fuel
deserialization.

No URL available at the moment.

Aside - before Fuel/SandstoneDb, I was using Glorp/PostgreSQL. I've
gained a lot of simplicity, but lost sequence numbers and object caching
(and maybe more things, that have not been a problem so far). I've
written a seqno replacement, but the lack of object caching is not a
problem at the moment (i.e. small data sets, so far).


Reply | Threaded
Open this post in threaded view
|

Re: [Pharo-users] Who is using Fuel?

NorbertHartl

Am 28.02.2012 um 19:15 schrieb Yanni Chiu:

> On 28/02/12 11:03 AM, Norbert Hartl wrote:
>>
>> I first used image persistence but the image grow to large. Then I added
>> fuel as journal to be written before image save in order to be able to
>> recover from an emergency.
>> Now we redo the persistence part. An account object graph is dissected
>> into configuration part and payload part. The payload is written
>> directly to mongo db in a Json format. The configuration part will be
>> written as fuel blob to mongo. Planned is that at startup a configured
>> amount of account fuel blobs are loaded and started. Those
>> configurations have their own proces ses that write back payload to
>> mongo. Etc.
>
> That's similar to what I do, except no image save and no mongo db.
>
As soon as the fuel blobs are in mongo (or on disk) no image save is needed then and I will start fresh everytime which is more reliable. Mongo is quite nice because I have a few hundred megabytes of data. And via cron it runs a map/reduce task to create the statistics about the data that has been fetched. The statistical data is displayed in charts on the web site again.

Norbert

> Here's how it goes:
> - on restart the image reconstructs a Pier kernel saved via Fuel to a file
> - included in the Pier kernel is what you're calling the "configuration part" - there are custom (non-std Pier) components here.
> - the components in the reconstructed image can read/write a "payload" part, which is serialized to files using Fuel and SandstoneDb.
> - additionally, a "sub-tree" of the Pier kernel can be exported to a file using Fuel serialization, and later imported using Fuel deserialization.
>
> No URL available at the moment.
>
> Aside - before Fuel/SandstoneDb, I was using Glorp/PostgreSQL. I've gained a lot of simplicity, but lost sequence numbers and object caching (and maybe more things, that have not been a problem so far). I've written a seqno replacement, but the lack of object caching is not a problem at the moment (i.e. small data sets, so far).
>
>


Reply | Threaded
Open this post in threaded view
|

Re: [Pharo-users] Who is using Fuel?

Sven Van Caekenberghe
In reply to this post by NorbertHartl
Norbert,

On 28 Feb 2012, at 17:32, Norbert Hartl wrote:

> I experience image corruption with big images.

I am assuming you are using a normal image on a 32-bit Cog VM on Linux ?

I am very interested in the practical limits on image size (not necessarily saving it).

What vm switches did you apply ?

I played a bit with some tests, and I could allocate about 1Gb in a 1.5GB heap VM.

What is your experience ?

Thx,

Sven


--
Sven Van Caekenberghe
http://stfx.eu
Smalltalk is the Red Pill





Reply | Threaded
Open this post in threaded view
|

Re: [Pharo-users] Who is using Fuel?

Mariano Martinez Peck
In reply to this post by Yanni Chiu


On Tue, Feb 28, 2012 at 7:15 PM, Yanni Chiu <[hidden email]> wrote:
On 28/02/12 11:03 AM, Norbert Hartl wrote:

I first used image persistence but the image grow to large. Then I added
fuel as journal to be written before image save in order to be able to
recover from an emergency.
Now we redo the persistence part. An account object graph is dissected
into configuration part and payload part. The payload is written
directly to mongo db in a Json format. The configuration part will be
written as fuel blob to mongo. Planned is that at startup a configured
amount of account fuel blobs are loaded and started. Those
configurations have their own proces ses that write back payload to
mongo. Etc.

That's similar to what I do, except no image save and no mongo db.

Here's how it goes:
- on restart the image reconstructs a Pier kernel saved via Fuel to a file
- included in the Pier kernel is what you're calling the "configuration part" - there are custom (non-std Pier) components here.
- the components in the reconstructed image can read/write a "payload" part, which is serialized to files using Fuel and SandstoneDb.

WOW. I didn't know there was a real user about that ;)
 
- additionally, a "sub-tree" of the Pier kernel can be exported to a file using Fuel serialization, and later imported using Fuel deserialization.


That's interesting!
 
No URL available at the moment.


Ok, let me know if you have one at some point in the future and I add it.
 
Aside - before Fuel/SandstoneDb, I was using Glorp/PostgreSQL. I've gained a lot of simplicity, but lost sequence numbers

Sequence numbers are the less thing you should care about since you can alwasy do it in image side ;)

and object caching (and maybe more things, that have not been a problem so far). I've written a seqno replacement, but the lack of object caching is not a problem at the moment (i.e. small data sets, so far).


Yes, object caching is NOT a problem itself, it is a feature of Glorp or whatever. If what you use (like Fuel) is slow, then it may require some tunning. It can be caching object or not. What I suggest is that you stress your system with big data sets and you will see if you really miss object caching or not.
 



--
Mariano
http://marianopeck.wordpress.com

Reply | Threaded
Open this post in threaded view
|

Re: [Pharo-users] Who is using Fuel?

NorbertHartl
In reply to this post by Sven Van Caekenberghe

Am 28.02.2012 um 20:35 schrieb Sven Van Caekenberghe:

> Norbert,
>
> On 28 Feb 2012, at 17:32, Norbert Hartl wrote:
>
>> I experience image corruption with big images.
>
> I am assuming you are using a normal image on a 32-bit Cog VM on Linux ?
>
yes

> I am very interested in the practical limits on image size (not necessarily saving it).
>
Ah, I was just talking. The latest image grew to 280MB on disk. I just experienced a corrupted image after a few days. I did a more or less clean procedure by stopping all threads while saving. But sometime the image seems to be not fully written on disk making it unloadable on next start. The only limit that I tested is a maximum of threads of 1100 or 1400, can't remember right now. The image is stuck then. But that's no problem to me.

> What vm switches did you apply ?
>
-encoding latin1 -nodisplay -nosound -mmap 512m

> I played a bit with some tests, and I could allocate about 1Gb in a 1.5GB heap VM.
>
I had only the save experience but there could be a huge amount of reasons why it failed. My feeling is that my images are getting worse the longer they run. But I have nothing real to base this assumption on.

> What is your experience ?

I'm sorry that's all. I just started to do deployments with pharo lately. I was doing everything in gemstone until 2 month ago.

Norbert
Reply | Threaded
Open this post in threaded view
|

Re: [Pharo-users] Who is using Fuel?

Yanni Chiu
In reply to this post by Mariano Martinez Peck
On 28/02/12 2:48 PM, Mariano Martinez Peck wrote:
>
> Yes, object caching is NOT a problem itself, it is a feature of Glorp or
> whatever. If what you use (like Fuel) is slow, then it may require some
> tunning. It can be caching object or not. What I suggest is that you
> stress your system with big data sets and you will see if you really
> miss object caching or not.

It not a speed issue. It's about how big the image gets if all the
on-disk objects get pulled into memory. The Glorp cache had a max cache
size and LRU policy, IIRC.


Reply | Threaded
Open this post in threaded view
|

Re: [Pharo-users] Who is using Fuel?

Sven Van Caekenberghe
In reply to this post by NorbertHartl

On 28 Feb 2012, at 21:30, Norbert Hartl wrote:

> Am 28.02.2012 um 20:35 schrieb Sven Van Caekenberghe:
>
>> Norbert,
>>
>> On 28 Feb 2012, at 17:32, Norbert Hartl wrote:
>>
>>> I experience image corruption with big images.
>>
>> I am assuming you are using a normal image on a 32-bit Cog VM on Linux ?
>>
> yes
>
>> I am very interested in the practical limits on image size (not necessarily saving it).
>>
> Ah, I was just talking. The latest image grew to 280MB on disk. I just experienced a corrupted image after a few days. I did a more or less clean procedure by stopping all threads while saving. But sometime the image seems to be not fully written on disk making it unloadable on next start. The only limit that I tested is a maximum of threads of 1100 or 1400, can't remember right now. The image is stuck then. But that's no problem to me.
>
>> What vm switches did you apply ?
>>
> -encoding latin1 -nodisplay -nosound -mmap 512m
>
>> I played a bit with some tests, and I could allocate about 1Gb in a 1.5GB heap VM.
>>
> I had only the save experience but there could be a huge amount of reasons why it failed. My feeling is that my images are getting worse the longer they run. But I have nothing real to base this assumption on.
>
>> What is your experience ?
>
> I'm sorry that's all. I just started to do deployments with pharo lately. I was doing everything in gemstone until 2 month ago.
>
> Norbert

Thx for the reply.

Some time ago, I tried this: http://forum.world.st/Big-Image-Tests-td4188045.html#a4188548

Sven
Reply | Threaded
Open this post in threaded view
|

Re: [Pharo-users] Who is using Fuel?

Yanni Chiu
In reply to this post by NorbertHartl
On 28/02/12 3:30 PM, Norbert Hartl wrote:
>
> I'm sorry that's all. I just started to do deployments with pharo
> lately. I was doing everything in gemstone until 2 month ago.

That's interesting. Have you moved everything to Pharo, or is some part
still in GemStone? Can you outline why GemStone was not the better
solution for your use case? (I suspect that your dataset was naturally
partitioned on user boundaries).


Reply | Threaded
Open this post in threaded view
|

Re: [Pharo-users] Who is using Fuel?

Mariano Martinez Peck
In reply to this post by Yanni Chiu


On Tue, Feb 28, 2012 at 9:46 PM, Yanni Chiu <[hidden email]> wrote:
On 28/02/12 2:48 PM, Mariano Martinez Peck wrote:

Yes, object caching is NOT a problem itself, it is a feature of Glorp or
whatever. If what you use (like Fuel) is slow, then it may require some
tunning. It can be caching object or not. What I suggest is that you
stress your system with big data sets and you will see if you really
miss object caching or not.

It not a speed issue. It's about how big the image gets if all the on-disk objects get pulled into memory. The Glorp cache had a max cache size and LRU policy, IIRC.



If I understand you correctly, then what you are talking about is not caching objects but rather lazy loading. You mean when Glorp lets some proxies of the loaded graph so that they can load the rest of the graph later on?
 



--
Mariano
http://marianopeck.wordpress.com

Reply | Threaded
Open this post in threaded view
|

Re: [Pharo-users] Who is using Fuel?

NorbertHartl
In reply to this post by Yanni Chiu

Am 28.02.2012 um 22:09 schrieb Yanni Chiu:

> On 28/02/12 3:30 PM, Norbert Hartl wrote:
>>
>> I'm sorry that's all. I just started to do deployments with pharo
>> lately. I was doing everything in gemstone until 2 month ago.
>
> That's interesting. Have you moved everything to Pharo, or is some part still in GemStone? Can you outline why GemStone was not the better solution for your use case? (I suspect that your dataset was naturally partitioned on user boundaries).


Sorry for the confusion. The part about pharo and gemstone was not referring to this project. Most of my projects run in GemStone and I'm quite satisified with it. I started this project in pharo because the main assets are http messaging and multiple long running processes.
Basically the zinc components are available in GemStone, too. But they are neither well integrated nor up to date. Could be better but that isn't a show stopper. It's more the long running processes. In GemStone I would need to start a separate vm in the system that cares about the running processes. Then you need to work out a communication scheme between your seaside UI model and the service vm. I would do this just to store a lot of request/response (dumb) data inside GemStone.
I was thinking about it and felt that it just does not fit GemStone that well. Last but not least I liked the idea to be forced to play with some of these modern storage systems.
To me GemStone and a combination of pharo with mongo db are not competitors. I find them pretty orthogonal in use cases possible. On the one hand there is GemStone where you can have a huge object graph with all the flexibility we like so much. I use this for more complex and highly interlinked models. Externalization of objects always restrict you in this respect. GemStone is a centralized database but one that can be distributed.
On the other hand pharo is more flexible and has the more modern tools. The pharo use case here is to start a couple of tens, hundreds,... of images that either collaborate directly or via a distributed storage. And pharo can scale vertical in machine size being used. I would like to use pharo on tiny machines and let them participate in all of this.
In between those two there is magma and on another far end there is amber. I think I want all of them so I always have the right tool whatever use case there might appear on the next day. If we are talking about scale than as a conclusion I can say that:

I love smalltalk because it scales in "things possible"

Uh, sorry for getting _slightly_ verbose and off-topic :)

Norbert
Reply | Threaded
Open this post in threaded view
|

Re: [Pharo-users] Who is using Fuel?

Yanni Chiu
On 28/02/12 6:20 PM, Norbert Hartl wrote:
>
> Uh, sorry for getting _slightly_ verbose and off-topic :)

Thanks for the informative answer. It's good to learn how others tackle
problems, and why they chose their solution.


Reply | Threaded
Open this post in threaded view
|

Re: [Pharo-users] Who is using Fuel?

Yanni Chiu
In reply to this post by Mariano Martinez Peck
On 28/02/12 4:30 PM, Mariano Martinez Peck wrote:
>
> If I understand you correctly, then what you are talking about is not
> caching objects but rather lazy loading. You mean when Glorp lets some
> proxies of the loaded graph so that they can load the rest of the graph
> later on?

Okay, the concept I meant is lazy loading using proxies.

So what is "object cache" - i.e. what concept did you have in mind, when
I used the term "object cache" earlier?


Reply | Threaded
Open this post in threaded view
|

Re: [Pharo-users] Who is using Fuel?

Sven Van Caekenberghe
In reply to this post by NorbertHartl
Norbert,

On 28 Feb 2012, at 21:30, Norbert Hartl wrote:

> The only limit that I tested is a maximum of threads of 1100 or 1400, can't remember right now. The image is stuck then.

I know we are way off topic, but are you sure you were not running into some OS limit (max open files/sockets which is often 1024 at the user level) ?

You can inspect the limits by doing:

$ ulimit -Hn
$ ulimit -Sn

for the hard and soft limits

Sven
Reply | Threaded
Open this post in threaded view
|

Re: [Pharo-users] Who is using Fuel?

Mariano Martinez Peck
In reply to this post by Yanni Chiu


On Wed, Feb 29, 2012 at 4:24 AM, Yanni Chiu <[hidden email]> wrote:
On 28/02/12 4:30 PM, Mariano Martinez Peck wrote:

If I understand you correctly, then what you are talking about is not
caching objects but rather lazy loading. You mean when Glorp lets some
proxies of the loaded graph so that they can load the rest of the graph
later on?

Okay, the concept I meant is lazy loading using proxies.

heheheh ok, then we agree :)
Indeed, it would be nice to have that. What I am not sure is how to decide when and where to cut the graph and let some proxies.
 

So what is "object cache" - i.e. what concept did you have in mind, when I used the term "object cache" earlier?


some internal optimization commonly done by ORMs (like Glorp) where they have a cache in primary memory of objects which were recently asked/queriered. The idea is to avoid going to the disk to fetch the object.
 



--
Mariano
http://marianopeck.wordpress.com

Reply | Threaded
Open this post in threaded view
|

Re: [Pharo-users] Who is using Fuel?

NorbertHartl
In reply to this post by Sven Van Caekenberghe

Am 29.02.2012 um 09:10 schrieb Sven Van Caekenberghe:

> Norbert,
>
> On 28 Feb 2012, at 21:30, Norbert Hartl wrote:
>
>> The only limit that I tested is a maximum of threads of 1100 or 1400, can't remember right now. The image is stuck then.
>
> I know we are way off topic, but are you sure you were not running into some OS limit (max open files/sockets which is often 1024 at the user level) ?
>
> You can inspect the limits by doing:
>
> $ ulimit -Hn
> $ ulimit -Sn
>
> for the hard and soft limits

I know, thanks. But my test was as simple as

14000 timesRepeat: [
        [ (Delay forSeconds: 60) wait ] forkAt: Processor userBackgroundPriority ]

I tested it again and it works. If I open the process browser and turn auto update on then it deadlocks. I made this "mistake" the last time, too. Otherwise with the above test I could start more than 25000 threads without problem.

Norbert